home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-10-24 | 102.5 KB | 2,176 lines |
-
-
- Electronic Telephone Cards: How to make your own!
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- I guess that Sweden is not the only country that employs the electronic phone
- card system from Schlumberger Technologies. This article will explain a bit
- about the cards they use, and how they work. In the end of this article you
- will also find an UUEncoded file which contains sourcecodes for a PIC16C84
- microcontroller program that completely emulate a Schlumberger Telephone card
- and of course printed circuit board layouts + component list... But before
- we begin talking seriously of this matter I must first make it completely
- clear that whatever you use this information for, is entirely YOUR
- responsibility, and I cannot be held liable for any problems that the use
- of this information can cause for you or for anybody else. In other words:
- I give this away FOR FREE, and I don't expect to get ANYTHING back in return!
-
- The Original Telephone Card:
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Since I probably would have had a hard time writing a better article than the
- one Stephane Bausson from France wrote a while ago, I will not attempt to give
- a better explanation than that one; I will instead incorporate it in this
- phile, but I do want to make it clear that the following part about the cards
- technical specification was not written by me: Merely the parts in quotes are
- things added by me... Instead I will concentrate on explaining how to build
- your own telephone card emulator and how the security measures in the payphone
- system created by Schlumberger Technologies work, and how to trick it...
- But first, let's have a look at the technical specifications of the various
- "smart memory card" systems used for the payphones.
-
-
- <Start of text quoted from Stephane Bausson (sbausson@ensem.u-nancy.fr)>
- ------------------------------------------------------------------------------
-
- ===============================================================================
- What you need to know about electronics telecards
- ===============================================================================
-
- (C) 10-07-1993 / 03-1994
- Version 1.06
- Stephane BAUSSON
-
- Email: sbausson@ensem.u-nancy.fr
- Smail: 4, Rue de Grand; F-88630 CHERMISEY; France
- Phone: (33)-29-06-09-89
- -------------------------------------------------------------------------------
- Any suggestions or comments about phonecards and smart-cards are welcome
- -------------------------------------------------------------------------------
-
- Content
- ---------
-
- I ) The cards from Gemplus, Solaic, Schlumberger, Oberthur:
-
- I-1) Introduction:
- I-2) SCHEMATICS of the chip:
- I-3) PINOUT of the connector:
- I-4) Main features:
- I-5) TIME DIAGRAMS:
- I-6) Memory MAP of cards from France and Monaco:
- I-5) Memory MAP of cards from other countries:
-
- II ) The cards from ODS: (German cards)
-
- II-1) Introduction:
- II-2) Pinout:
- II-3) Main features:
- II-4) Time Diagrams:
- II-5) Memory Map:
- II-6) Electrical features:
-
-
- III) The Reader Schematic:
-
- IV) The program:
-
- -------------------------------------------------------------------------------
-
- I ) The cards from Gemplus, Solaic, Schlumberger, Oberthur: (French cards)
- ======================================================================
-
- I-1) Introduction:
- ------------
-
- You must not think that the electronics phone-cards are completly secret
- things, and that you can not read the informations that are inside. It is quite
- false, since in fact an electronic phonecard does not contain any secret
- information like credit cards, and an electronic phonecard is nothing else that
- an 256 bits EPROM, with serial output.
-
- Besides do not think that you are going to refilled them when you will
- have understood how they work, since for that you should reset the 256 bits of
- the cards by erasing the whole card. But the chip is coated in UV opaqued resin
- even if sometime you can see it as tranparent! Even if you were smart enough to
- erase the 256 bits of the card you should program the manufactuer area, but
- this is quite imposible since these first 96 bits are writing protected by a
- lock-out fuse that is fused after the card programing in factory.
-
- Neithertheless it can be very interesting to study how these cards work, to
- see which kind of data are inside and how the data are maped inside or to see
- how many units are left inside for exemple. Besides there are a great number of
- applications of these cards when there are used (only for personal usage of
- course) , since you can use them as key to open a door, or you can also use them as
- key to secure a program, etc ....
-
- These Telecards have been created in 1984 and at this time constructors
- decided to build these cards in NMOS technology but now, they plan to change by
- 1994 all readers in the public to booths and use CMOS technology. Also they
- plan to use EEPROM to secure the cards and to add many usefull infornations in,
- and you will perhaps use phone cards to buy you bread or any thing else.
-
- These cards are called Second Generation Telecards.
-
-
- I-2) SCHEMATICS of the chip:
- ----------------------
-
- .-------------------.
- | |
- --|> Clk |
- | _ |
- --| R/W |
- | |
- --| Reset |
- | |
- --| Fuse |
- | |
- --| Vpp |
- | |
- | |
- '-. .-'
- | |
- .-------------------.
- | Out |-- serial output
- '-------------------'
-
-
- I-3) PINOUT of the connector:
- -------------------------
-
-
- AFNOR CHIP ISO CHIP
- ---------- --------
-
- -------------+------------- -------------+-------------
- | 8 | 4 | | 1 | 5 |
- | | | | | |
- +-------\ | /-------+ +-------\ | /-------+
- | 7 +----+----+ 3 | | 2 +----+ + 6 |
- | | | | | | | |
- +--------| |--------+ +--------| |--------+
- | 6 | | 2 | | 3 | | 7 |
- | + +----+ | | +----+----+ |
- +-------/ | \-------+ +-------/ | \-------+
- | 5 | 1 | | 4 | 8 |
- | | | | | |
- -------------+------------- -------------+-------------
-
- NB: only the position of the chip is ISO
- standardized and not the pinout
-
- PINOUT: 1 : Vcc = 5V 5 : Gnd
- ------ 2 : R/W 6 : Vpp = 21V
- 3 : Clock 7 : I/O
- 4 : Reset 8 : Fuse
-
- I-4) Main features:
- ---------------
-
- - Synchronous protocol.
- - N-MOS technology.
- - 256x1 bit organisation.
- - 96 written protected by a lock-out fuse.
- - Low power 85mW in read mode.
- - 21 V programming voltage.
- - Access time: 500ns
- - Operating range: -10░C +70░C
- - Ten year data rentention.
-
-
- I-5) TIME DIAGRAMS:
- ---------------
-
- +21V _____________
- +5V ____________________________________| |_________________ Vpp
- : :
- +5V ___________________:_____________:_________________ Reset
- 0V ________________| : :
- : : :
- +5V ____ : ____ : ______:______
- 0V ___| |_______:_____| |________:______| : |__________ Clock
- : : : : : : : : :
- +5V : : : : : :______:______: : _
- 0V ___:____:_______:_____:____:________| : |______:__________ R/W
- : : : : : : : : :
- +5V : : :_____: :________: : : :__________
- 0V XXXXXXXXXXXXXXXXX_____XXXXXX________XXXXXXXXXXXXXXXXXXXXXX__________ Out
- : : : : : :<-----><---->: :
- : : : : : :10 to 10 to :
- : : : : : :50 ms 50ms :
- Reset Bit 1 Bit2 Bit 3
- card reading reading Bit2 writing to 1 reading
-
-
-
- I-6) MEMORY MAP of cards from France and Monaco:
- --------------------------------------------
-
- Bytes Bits Binary Hexa
-
- +-----------+-----+
- 1 1 --> 8 | | | ---> Builder code.
- +-----------+-----+
- 2 9 --> 16 | 0000 0011 | $03 | ---> a french telecard
- +-----------+-----+
- 3 17 --> 24 | | |
- +-----------+-----+
- 4 25 --> 32 | | |
- +-----------+-----+
- 5 33 --> 40 | | |
- +-----------+-----+
- 6 41 --> 48 | | |
- +-----------+-----+
- 7 49 --> 56 | | |
- +-----------+-----+
- 8 57 --> 64 | | |
- +-----------+-----+
- 9 65 --> 72 | | |
- +-----------+-----+
- 10 73 --> 80 | | |
- +-----------+-----+
- 11 81 --> 88 | | |
- +-----------+-----+
- 12 33 --> 40 | 0001 0011 | $13 | ---> 120 units card
- | 0000 0110 | $06 | ---> 50 units card
- | 0000 0101 | $05 | ---> 40 units card
- +-----------+-----+
- 13-31 97 --> 248 | | | ---> The units area: each time a unit
- | | | is used, then a bit is set to "1";
- | | | Generaly the first ten units are
- | | | fused in factory as test.
- | | |
- | | |
- | | |
- +-----------+-----+
- 32 249 --> 256 | 1111 1111 | $FF | ---> the card is empty
- +-----------+-----+
-
-
-
- I-7) MEMORY MAP of the other cards:
- -------------------------------
-
- Bytes Bits Binary Hexa
-
- +-----------+-----+
- 1 1 --> 8 | | |
- +-----------+-----+
- 2 9 --> 16 | 1000 0011 | $83 | ---> a telecard
- +-----------+-----+-----------+-----+
- 3-4 17 --> 32 | 1000 0000 | $80 | 0001 0010 | $12 | ---> 10 units card
- | | | 0010 0100 | $24 | ---> 22 units card
- | | | 0010 0111 | $27 | ---> 25 units card
- | | | 0011 0010 | $32 | ---> 30 units card
- | | | 0101 0010 | $52 | ---> 50 units card
- | | | 1000 0010 | $82 | ---> 80 units card
- | 1000 0001 | $81 | 0000 0010 | $02 | ---> 100 untis card
- | | | 0101 0010 | $52 | ---> 150 units card
- +-----------+-----+-----------+-----+
- 5 33 --> 40 | | |
- +-----------+-----+
- 6 41 --> 48 | | |
- +-----------+-----+
- 7 49 --> 56 | | |
- +-----------+-----+
- 8 57 --> 64 | | |
- +-----------+-----+
- 9 65 --> 72 | | |
- +-----------+-----+
- 10 73 --> 80 | | |
- +-----------+-----+
- 11 81 --> 88 | | |
- +-----------+-----+
- 12 89 --> 96 | 0001 1110 | $1E | ---> Sweden
- | 0010 0010 | $22 | ---> Spain
- | 0011 0000 | $30 | ---> Norway
- | 0011 0011 | $33 | ---> Andorra
- | 0011 1100 | $3C | ---> Ireland
- | 0100 0111 | $47 | ---> Portugal
- | 0101 0101 | $55 | ---> Czech Republic
- | 0101 1111 | $5F | ---> Gabon
- | 0110 0101 | $65 | ---> Finland
- +-----------+-----+
- 13-31 97 --> 248 | | | ---> The units area: each time a unit
- | | | is used, then a bit is set to "1";
- | | |
- | | | Generaly the first two units are
- | | | fused in factory as test.
- | | |
- | | |
- +-----------+-----+
- 32 249 --> 256 | 0000 0000 | $00 |
- +-----------+-----+
-
-
-
- II ) The cards from ODS, Giesecke & Devrient, ORGA Karten systeme,
- =============================================================
- Uniqua, Gemplus, Schlumberger and Oldenbourg Kartensysteme:
- ===========================================================
-
- II-1) Introduction:
- ------------
-
- These cards are in fact 128 bit memory in NMOS technology, and the
- map of these cards are the following:
-
- 64 bit EPROM written protected (manufaturer area).
- 40 bit EEPROM (5x8 bits).
- 24 bits set to "1".
-
-
- II-2) Pinout:
- --------
-
- ISO 7816-2
-
- -------------+-------------
- | 1 | 5 | Pinout:
- | | | -------
- +-------\ | /-------+
- | 2 +----+ + 6 | 1 : Vcc = 5V 5 : Gnd
- | | | | 2 : Reset 6 : n.c.
- +--------| |--------+ 3 : Clock 7 : I/O
- | 3 | | 7 | 4 : n.c. 8 : n.c.
- | +----+----+ |
- +-------/ | \-------+ n.c. : not connected
- | 4 | 8 |
- | | |
- -------------+-------------
-
-
- II-3) Main features:
- ---------------
-
- - ISO 7816- 1/2 compatible.
- - use a single 5V power supply.
- - low power consuption.
- - NMOS technology.
-
- II-4) Time Diagrams:
- ----------------
-
- Reset:
- ------
- The address counter is reset to 0 when the clock line CLK is raised while
- the control line R is high. Note that the address counter can not be reset
- when it is in the range 0 to 7.
-
- __________________
- _____| |_____________________________________________ Reset
- : :
- : _____ : _____ _____ _____ _____
- _____:_______| |____:_| |_____| |_____| |_____| |_ Clk
- : : : : : : : : : : :
- _____:_______:__________:_:_____:_____:_____:_____:_____:_____:_____:_
- _____:___n___|_____0____:_|_____1_____|_____2_____|_____3_____|___4_:_ (Address)
- : : : : : :
- _____: :_______:___________:___________:___________:_
- _____XXXXXXXXXXXXXXXXXXXX_______|___________|___________|___________|_ Data
- Bit n Bit 0 Bit 1 Bit2 Bit3
-
- The address counter is incremented by 1 with each rising edge of the clock
- signal Clk, for as long as the control line R remains low. The data held in
- each addressed bit is output to I/O contact each time Clk falls. It is not
- impossible to decrement the address counter, therefore to address an earlier
- bit, the address counter must be reset then incremented to require value.
-
-
- Write:
- ------
- All unwritten or erased bits in the address 64-104 may be unwritten to.
- When a memory cell is unwritten to, it is set to 0. The addressed cell is
- unwritten to by the following sequence.
-
- 1- R is raised while Clk is low, to disable address counter increment for one
- clock pulse.
-
- 2- Clk is then raised for a minimum of 10ms to write to the address bit.
-
- When to write operation ends, and Clk falls, the address counter is unlocked,
- and the content of the written cell, which is now 0, is output to I/O contact
- if the operation is correct.
- The next Clk pulse will increment the address by one, then the write sequence
- can be repeated to write the next bit.
-
- _____ _____
- _____________| |______________________________| |_______________ Reset
- : :
- ___ : _____ ___ : _____
- ____| |____:__________| |_________| |_____:__________| |____ Clk
- : : : : : : : : :
- ____:________:__________:_____:_________:___:_____:__________:_____:_____
- n | n+1 | n+2 | : n+3 | : (Address)
- ----'--------:----------'-----:---------'---:-----:----------'-----:-----
- : : : : : : :
- _________ _: : : ____________: ___: : :
- _________XXX_XXXXXXXXXXXXXXXXXXX____________ XX___XXXXXXXXXXXXXXXXXXXXXXX I/O
- n n+1 : : n+1 n+2 : :
- : : : :
- write write
-
-
- WriteCarry:
- -----------
-
- A counter is erased by performing the WRITECARRY sequence on the stage of
- the next highest weighing to that to be erased.
-
- The writecarry sequence is as follows:
-
- 1 - Set the address counter to an unwritten bit in the next highest counter
- stage to that to be erased.
-
- 2 - Increment is disabled on the following rising edge of R where Clk remains
- low.
-
- 3 - Clk is then raised for a minimum of 10ms, while R is low, to write to the
- next address bit.
-
- 4 - R is the raised again while Clk remains low to disable increment a second
- time.
-
- 5 - Clk is the raised for a minimum of 1ms, while R is low, to write to the
- addressed bit a second time, erasing the counter level immediately below that
- the addressed bit.
-
- _____ _____
- ______| |____________________| |_________________________________ Rst
- : :
- : _______ : _______ ___
- ______:___________| |______:_____________| |______| |______ Clk
- : : : : : : : :
- : : : : : : : :
- <------------------------- address n ------------------------>:<--- n+1 ------
- : : : : : : :
- : : : : : : :
- ______: : :______: : :__________: _____
- ______XXXXXXXXXXXXXXXXXXXXX______XXXXXXXXXXXXXXXXXXXXXXX__________XX_____ I/O
- : : n : : n n+1
- : : : :
- Write Erase
-
- II-5) Memory Map:
- -------------
-
- Bytes Bits Binary Hexa
-
- +-----------+-----+
- 1 1 --> 8 | | |
- +-----------+-----+
- 2 9 --> 16 | 0010 1111 | $2F | ---> Germany
- | 0011 0111 | $37 | ---> Netherland
- | 0011 1011 | $3B | ---> Greece
- +-----------+-----+
- 3 17 --> 24 | | |
- 4 25 --> 32 | | | ---> Issuer area (written protected)
- 5 33 --> 40 | | |
- 6 41 --> 48 | | |
- 7 49 --> 56 | | |
- 8 57 --> 64 | | |
- +-----------+-----+
- 9 65 --> 72 | | | ---> c4096 )
- 10 73 --> 80 | | | ---> c512 )
- 11 81 --> 88 | | | ---> c64 ) 5 stage octal counter
- 12 89 --> 96 | | | ---> c8 )
- 13 97 --> 104 | | | ---> c0 )
- +-----------+-----+
- 14 105 --> 112 | 1111 1111 | $FF |
- 15 113 --> 120 | 1111 1111 | $FF | ---> area of bits set to "1"
- 16 120 --> 128 | 1111 1111 | $FF |
- +-----------+-----+
-
- The Issuer area:
- ----------------
-
- This issuer consists of 40 bits. The contents of the issuer area are
- specified by the card issuer, and are fixed during the manufacturing process.
- The contents of the issuer area will include data such as serial numbers,
- dates, and distribution centers.
-
- This area may only be read.
-
- The Counter area:
- -----------------
-
- The counter area stores the card's units. Its initial value is specified
- by the card issuer and set during manufacturing.
-
- The counter area is divided into a 5 stage abacus.
-
- Note that you can only decrease the counter and it is not authorised to write
- in the counter a value greater than the old value.
-
-
- I-6) Electrical features:
- --------------------
-
- Maximum ratings:
- ----------------
-
- +--------+------+------+------+
- | Symbol | Min | Max | Unit |
- +----------------------+--------+------+------+------+
- | Supply voltage | Vcc | -0.3 | 6 | V |
- +----------------------+--------+------+------+------+
- | Input voltage | Vss | -0.3 | 6 | V |
- +----------------------+--------+------+------+------+
- | Storage temperature | Tstg | -20 | +55 | ░C |
- +----------------------+--------+------+------+------+
- | Power dissipassion | Pd | - | 50 | mW |
- +----------------------+--------+------+------+------+
-
-
- DC caracteristics:
- ------------------
- +--------+-----+-----+-----+------+
- | Symbol | Min.| Typ.| Max.| Unit |
- +---------------------------+--------+-----+-----+-----+------+
- | Suplly current | Icc | - | - | 5 | mA |
- +---------------------------+--------+-----+-----+-----+------+
- | Input Voltage (low) | Vl | 0 | - | 0.8 | V |
- +---------------------------+--------+-----+-----+-----+------+
- | Input voltage (high) | Vh | 3.5 | - | Vcc | V |
- +---------------------------+--------+-----+-----+-----+------+
- | Input current R | Ih | - | - | 100 | uA |
- +---------------------------+--------+-----+-----+-----+------+
- | Input current Clk | Il | - | - | 100 | uA |
- +---------------------------+--------+-----+-----+-----+------+
- | Output current (Vol=0.5V) | Iol | - | - | 10 | uA |
- +---------------------------+--------+-----+-----+-----+------+
- | Output current (Voh=5V) | Ioh | - | - | 0.5 | mA |
- +---------------------------+--------+-----+-----+-----+------+
-
- AC caracteristics:
- ------------------ +--------+------+------+------+
- | Symbol | Min. | Max. | Unit |
- +----------------------+--------+------+------+------+
- | Pulse duration | tr | 50 | - | us |
- | R address reset | | | | |
- +----------------------+--------+------+------+------+
- | Pulse duration | ts | 10 | - | us |
- | R write | | | | |
- +----------------------+--------+------+------+------+
- | High level Clk | th | 8 | - | us |
- +----------------------+--------+------+------+------+
- | Low level Clk | tl | 12 | - | us |
- +----------------------+--------+------+------+------+
- | Write window | Twrite | 10 | - | ms |
- +----------------------+--------+------+------+------+
- | Erase window | Terase | 10 | - | ms |
- +----------------------+--------+------+------+------+
- | | tv1 | 5 | - | us |
- +----------------------+--------+------+------+------+
- | | tv2 | 3.5 | - | us |
- +----------------------+--------+------+------+------+
- | | tv3 | 3.5 | - | us |
- +----------------------+--------+------+------+------+
- | | tv4 | 3.5 | - | us |
- +----------------------+--------+------+------+------+
- | | tv5 | 3.5 | - | us |
- +----------------------+--------+------+------+------+
- | | tv6 | 5 | - | us |
- +----------------------+--------+------+------+------+
- | | tv7 | 5 | - | us |
- +----------------------+--------+------+------+------+
- | | tv8 | 10 | - | us |
- +----------------------+--------+------+------+------+
-
-
-
- III) The Reader Schematic:
- ======================
-
- External 5V (Optional)
-
- 5V o------,
- | / T2 PNP d13 r7 10
- 0V o--, | / BC 177 |\ | _____
- | | ,-------o/ o--*------. E C .--| >+-[_____]--------,
- __+__ | | | \ / |/ | |
- \\\\\ | __|__ Batery | \ / |
- | - 22.5V | --------- |
- ....... | | | _____ | _____ |
- : | __+__ +--[_____]--*--[_____]--, |
- D2 : | \\\\\ r6 150k r5 15k | |
- 4 o-------|---------------------------*------------------|-------------, |
- : | | r3 220k / C | |
- Ack : | | _____ |/ T1 - NPN | |
- 10 o------|--------. '--[_____]-*---| BC107 | |
- : | | _____ | |\ | |
- : ,-, ,-, +--[_____]-' \ E | |
- : | |r2 | |r1 | r4 390k | | |
- : | |220 | |22k __+__ __+__ | |
- : |_| |_| \\\\\ \\\\\ | |
- : | |\ | | | |
- : *--| >+--|----------------*----------------------------------|--*
- : | |/ | | ,-----|-----------------------------, | |
- : | d1 | | | ,----------,----------, | | |
- : | | | *---|--* Fuse | Reset *--|---' | |
- : | | | | |----------|----------| | |
- D0 : | | | ,-|---|--* I/O | Clk *--|---, | |
- 2 o-------|--------|----------' | | |----------|----------| | | |
- : | | | '---|--* Vpp | R/W *--|---|----' |
- Busy : | | | |----------|----------| | |
- 11 o------|--------|--------------' ,---|--* Gnd | 5V * | | |
- : | | | '----------'-------|--' | |
- D1 : | | __+__ Chip connector | | |
- 3 o-------|--------|--------, \\\\\ | | |
- : | | '------------------------------|------' |
- Str : | |\ | | | |
- 1 o-------*--| >+--*----*----*----*----*-------------------' |
- : d2|/ | |d3 |d4 |d5 |d6 |d7 |
- : -+- -+- -+- -+- -+- |
- : /_\ /_\ /_\ /_\ /_\ |
- D3 : | | | | | |\ | d8 |
- 5 o----------------*----|----|----|----|---| >+-------*-------------------'
- : | | | | |/ | |
- : | | | | |
- D4 : | | | | |\ | d9 |
- 6 o---------------------*----|----|----|---| >+-------*
- : | | | |/ | |
- : | | | |
- D5 : | | | |\ | d10 |
- 7 o--------------------------*----|----|---| >+-------*
- : | | |/ | |
- : | | |
- D6 : | | |\ | d11 |
- 8 o-------------------------------*----|---| >+-------*
- : | |/ | |
- : | |
- D7 : | |\ | d12 |
- 9 o------------------------------------*---| >+-------'
- : |/ |
- :
- :
- 25 o------.
- : |
- .......: | d1 to d13: 1N4148
- __+__
- \\\\\
-
- Centronic port
-
-
-
-
- IV) The program:
- ===========
-
- The following program will enable you to read telecards on you PC if you
- build the precedent reader.
-
- --------------- cut here (begin)
- {*****************************************************************************}
- { T E L E C A R D . PAS }
- {*****************************************************************************}
- { This program enable you to dumb the memory of electronics phonecards }
- { from all over the world, so that you will be able to see which country }
- { the card is from how many units are left and so on .... }
- {*****************************************************************************}
- { }
- { Written by Stephane BAUSSON (1993) }
- { }
- { Email: sbausson@ensem.u-nancy.fr }
- { }
- { Snail Mail Address: 4, Rue de Grand }
- { F-88630 CHERMISEY }
- { France }
- { }
- {*****************************************************************************}
- {* Thanks to: Tomi Engdahl (Tomi.Engdahl@hut.fi) *}
- {*****************************************************************************}
-
- USES crt,dos;
-
- CONST port_address=$378; { lpr1 chosen }
-
- TYPE string8=string[8];
- string2=string[2];
-
- VAR reg : registers;
- i,j : integer;
- Data : array[1..32] of byte;
- car : char;
- byte_number : integer;
- displaying : char;
-
- {-----------------------------------------------------------------------------}
-
- PROCEDURE Send(b:byte);
-
- BEGIN port[port_address]:=b;
- END;
-
- {-----------------------------------------------------------------------------}
-
- FUNCTION Get:byte;
-
- BEGIN get:=port[port_address+1];
- END;
-
- {-----------------------------------------------------------------------------}
- { FUNCTION dec2hexa_one(decimal_value):hexa_character_representation; }
- { }
- { - convert a 4 bit long decimal number to hexadecimal. }
- {-----------------------------------------------------------------------------}
-
- FUNCTION dec2hexa_one(value:byte):char;
-
- BEGIN case value of
- 0..9 : dec2hexa_one:=chr(value+$30);
- 10..15 : dec2hexa_one:=chr(value+$37);
- END;
- END;
-
- {-----------------------------------------------------------------------------}
- { FUNCTION d2h(decimal_byte):string2; }
- { }
- { - convert a decimal byte to its hexadecimal representation. }
- {-----------------------------------------------------------------------------}
-
- FUNCTION d2h(value:byte):string2;
-
- VAR msbb,lsbb:byte;
-
- BEGIN msbb:=0;
- if ( value >= $80 ) then
- BEGIN msbb:=msbb+8;
- value:=value-$80;
- END;
- if ( value >= $40 ) then
- BEGIN msbb:=msbb+4;
- value:=value-$40;
- END;
- if ( value >= $20 ) then
- BEGIN msbb:=msbb+2;
- value:=value-$20;
- END;
- if ( value >= $10 ) then
- BEGIN msbb:=msbb+1;
- value:=value-$10;
- END;
-
- lsbb:=0;
- if ( value >= $08 ) then
- BEGIN lsbb:=lsbb+8;
- value:=value-$08;
- END;
- if ( value >= $04 ) then
- BEGIN lsbb:=lsbb+4;
- value:=value-$04;
- END;
- if ( value >= $02 ) then
- BEGIN lsbb:=lsbb+2;
- value:=value-$02;
- END;
- if ( value >= $01 ) then
- BEGIN lsbb:=lsbb+1;
- value:=value-$01;
- END;
- d2h := dec2hexa_one(msbb) + dec2hexa_one(lsbb);
- END;
-
- {-----------------------------------------------------------------------------}
-
- Function Binary( b : byte):string8;
-
- var weigth : byte;
- s : string8;
-
- BEGIN weigth:=$80;
- s:='';
- while (weigth > 0) do
- BEGIN if ((b and weigth) = weigth) then s:=s+'1'
- else s:=s+'0';
- weigth:=weigth div $02;
- END;
- Binary:=s;
- END;
-
- {-----------------------------------------------------------------------------}
-
- FUNCTION Units:byte;
-
- VAR u, i : integer;
- s : string8;
-
- BEGIN u:=0;
- i:=13;
- while (Data[i] = $FF) do
- BEGIN u:=u+8;
- i:=i+1;
- END;
- s:=Binary(Data[i]);
- while(s[1]='1') do
- BEGIN inc(u);
- s:=copy(s,2,length(s));
- END;
- units:=u;
- END;
-
- {-----------------------------------------------------------------------------}
-
- function Units_2:LongInt;
-
- BEGIN Units_2:=4096*Data[9]+512*Data[10]+64*Data[11]+8*Data[12]+Data[13];
- END;
-
- {-----------------------------------------------------------------------------}
-
- PROCEDURE Card_Type;
-
- BEGIN case Data[2] of
- $03: BEGIN write('Telecard - France - ');
- case Data[12] of
- $13: write('120 Units - ',units-130,' Units left');
- $06: write('50 Units - ',units-60,' Units left');
- $15: write('40 Units - ',units-40,' Units left');
- END;
- END;
- $2F:BEGIN write('Telecard - Germany - ', Units_2, ' Units left');
- END;
- $3B:BEGIN write('Telecard - Greece - ', Units_2, ' Units left');
- END;
- $83:BEGIN write('Telecard');
- case Data[12] of
- $1E: write(' - Sweden');
- $30: write(' - Norway');
- $33: write(' - Andorra');
- $3C: write(' - Ireland');
- $47: write(' - Portugal');
- $55: write(' - Czech Republic');
- $5F: write(' - Gabon');
- $65: write(' - Finland');
- END;
- if (Data[12] in [$30,$33,$3C,$47,$55,$65]) then
- BEGIN case ((Data[3] and $0F)*$100+Data[4]) of
- $012: write (' - 10 Units - ',units-12,' Units left');
- $024: write (' - 22 Units - ',units-24,' Units left');
- $027: write (' - 25 Units - ',units-27,' Units left');
- $032: write (' - 30 Units - ',units-32,' Units left');
- $052: write (' - 50 Units - ',units-52,' Units left');
- $067: write (' - 65 Units - ',units-62,' Units left');
- $070: write (' - 70 Units - ',units-70,' Units left');
- $102: write (' - 100 Units - ',units-102,' Units left');
- $152: write (' - 150 Units - ',units-152,' Units left');
- END;
- END;
- { write(' - N░ ',Data[5]*$100+Data[6]);}
- END;
- END;
- END;
-
- {-----------------------------------------------------------------------------}
-
- PROCEDURE waiting;
-
- BEGIN send($00);
- write('Enter a card in the reader and press a key ...');
- repeat until keypressed;
- gotoxy(1, wherey);
- clreol;
- END;
-
- {-----------------------------------------------------------------------------}
-
- PROCEDURE Full_Displaying;
-
- BEGIN writeln('Memory dump:');
- for i:=1 to 80 do write('-');
- for i:=1 to (byte_number div 6 + 1) do
- BEGIN for j:=1 to 6 do
- BEGIN if j+6*(i-1) <= byte_number then write(binary(Data[j+6*(i-1)]):9);
- END;
- gotoxy(60,wherey);
- for j:=1 to 6 do
- if j+6*(i-1) <= byte_number then write(d2h(Data[j+6*(i-1)]),' ');
- writeln;
- END;
- for i:=1 to 80 do write('-');
- Card_Type;
- writeln;
- END;
-
- {-----------------------------------------------------------------------------}
-
- PROCEDURE Short_Displaying;
-
- VAR j : integer;
-
- BEGIN for j:=1 to byte_number do
- BEGIN write(d2h(Data[j]),' ');
- END;
- writeln;
- END;
-
- {-----------------------------------------------------------------------------}
-
- PROCEDURE Reading;
-
- VAR i, j : integer;
- Value : byte;
-
- BEGIN send($FE);
- send($F8);
- for i:=1 to 32 do
- BEGIN Value:=0;
- for j:=1 to 8 do
- BEGIN Value:=Value*$02 + ((get and $08) div $08);
- send($FB);
- delay(1);
- send($F8);
- END;
- Data[i]:=Value;
- END;
- case displaying of
- 'F':full_displaying;
- 'S':short_displaying;
- END;
- END;
-
- {-----------------------------------------------------------------------------}
-
- PROCEDURE writting;
-
- VAR i,n:integer;
- car:char;
-
- BEGIN write('Which bit do you want to set to "1" : ');
- readln(n);
-
- waiting;
- car:=readkey;
-
- send($FA);
- send($F8);
- for i:=1 to n do
- BEGIN send($F9);
- if i=n then
- BEGIN send($FD);
- delay(20);
- send($FF);
- delay(20);
- END;
- send($FB);
- END;
- reading;
- END;
-
- {-----------------------------------------------------------------------------}
-
- PROCEDURE Saving;
-
- VAR filename : string;
- f : text;
- i : word;
-
- BEGIN write('Enter the filename: ');
- readln(filename);
- assign(f, filename);
- rewrite(f);
- for i:=1 to byte_number do write(f,d2h(Data[i]),' ');
- close(f);
- END;
-
- {-----------------------------------------------------------------------------}
-
- PROCEDURE initialize;
-
- VAR i : integer;
-
- BEGIN byte_number:=32;
- displaying:='F';
- clrscr;
- writeln(' 1 - to dump a 256 bits card');
- writeln(' 2 - to dump a 128 bits card');
- writeln(' F - to display in full format');
- window(41,1,80,25);
- writeln(' S - to display in short format');
- writeln(' F2 - to save in a file');
- writeln(' Q - to exit the program');
- window(1,4,80,25);
- for i:=1 to 80 do write('=');
- window(1,5,80,25);
- END;
-
- {=============================================================================}
-
- BEGIN initialize;
- repeat waiting;
- car:=upcase(readkey);
- case car of
- 'W':writting;
- 'Q':;
- '1':byte_number:=32;
- '2':byte_number:=16;
- 'F','S':displaying:=car;
- #00: BEGIN car:=readkey;
- if car=#60 then saving;
- END;
- else reading;
- END;
- until car='Q';
- END.
- --------------- cut here (end)
-
-
-
-
-
- _/_/_/_/_/ Stephane BAUSSON
- _/_/_/_/_/ Engineering student at ENSEM (Nancy - France)
- _/_/_/_/_/ Smail: 4, Rue de Grand, F-88630 CHERMISEY, France
- _/_/_/_/_/
- _/_/_/_/_/ Email: sbausson@ensem.u-nancy.fr
-
- ------------------------------------------------------------------------------
- <End of text quoted from Stephane Bausson's text about the telephone cards>.
-
-
- The Program:
- ~~~~~~~~~~~~
- Well, when I saw this phile about the cards the first time, about a year ago
- I quickly realized that this system is very unsecure and really needs to be
- hacked. So, now I present you with a piece of software for the PIC 16C84 RISC
- microcontroller from Microchip that will take care of emulating the cards
- used by Schlumberger and others. This system is to be found in Scandinavia
- (Sweden, Norway and Finland), Spain, France and other countries. I do know
- that France probably needs some small modifications for this to work, but I
- see no reason to as why it shouldn't do so! For this to work, you need to
- have access to a PROM burner which can handle the PIC 16C84, or you might
- just build one yourself as I include some plans for that in the UUEncoded
- block to be found at the end of this phile. First of all, you have to read
- off the first 12 bytes of data from a valid card from the country you wish
- your emulator to work in. This because I don't think it would be a good idea
- to publish stolen card identities in Phrack. Then you simply enter those 12
- bytes of data in the proper place in my program and compile it. That's it...
- And since I happen to choose a version of the PIC with internal Data EEPROM,
- that means that the first 12 locations of the Data EEPROM should contain the
- card id bytes. As of today this code should work smooth and fine, but maybe
- you'll need to modify it later on when Schlumberger gets tired of my hack.
- But since the PIC is a very fast and powerful microcontroller it might be
- quite hard for them to come up with a solution to this problem. Let's have
- a look at the PIC Software! (Note that the current version of Microchip's
- PICSTART 16B package is unable to program the DATA EEPROM array in the 16C84
- so if you are going to use that one, use the other version of the source code
- which you'll find in the UUEncoded part!).
-
- <Start of TELECARD.ASM>.
- ==============================================================================
-
- TITLE "ISO 7816 Synchronous Memory Card Emulator"
- LIST P=PIC16C84, R=HEX
- INCLUDE "PICREG.EQU"
-
- ; PIC16C84 I/O Pin Assignment List
-
- CRD_CLK equ 0 ; RB0 + RA4 = Card Clock
- CRD_DTA equ 0 ; RA0 = Card Data Output
- CRD_RST equ 1 ; RB1 = Card Reset, Low-Active
- CRD_WE equ 7 ; RB7 = Card Write-Enable, Hi-Active
-
- ; PIC16C84 RAM Register Assignments
-
- CRD_ID equ 0x00c ; Smartcard ID, 12 bytes
- FUSCNT equ 0x018 ; Fused units counter
- BITCNT equ 0x019 ; Bitcounter
- LOOPCNT equ 0x01a ; Loop Counter
- EE_FLAG equ 0x01b ; EEPROM Write Flag
- TEMP1 equ 0x01c ; Temporary Storage #1
- TEMP2 equ 0x01d ; Temporary Storage #2
- TEMP3 equ 0x01e ; Temporary Storage #3
- TEMP4 equ 0x01f ; Temporary Storage #4
- TEMP_W equ 0x02e ; Temporary W Save Address
- TEMP_S equ 0x02f ; Temporary STATUS Save Address
-
- org 0x2000 ; Chip ID Data
- dw 042,042,042,042
-
- org 0x2007 ; Configuration Fuses
- dw B'00000001'
-
- org 0x2100 ; Internal Data EEPROM Memory (Card ID!!!)
- db 0x081,0x042,0x000,0x011,0x022,0x033
- db 0x044,0x055,0x066,0x077,0x011,0x084
- db 0x002 ; Default used up credits value
-
- org PIC84 ; Reset-vector
- goto INIT ; Jump to initialization routine
-
- org INTVEC ; Interupt-vector
- push ; Save registers
- call INTMAIN ; Call main interupt routine
- pop ; Restore registers
- retfie ; return from interupt & clear flag
-
- org 0x010 ; Start address for init rout.
- INIT bsf STATUS,RP0 ; Access register bank 1
- clrwdt ; Clear watchdog timer
- movlw B'11101000' ; OPTION reg. settings
- movwf OPTION ; Store in OPTION register
- movlw B'11111110' ; Set PORT A Tristate Latches
- movwf TRISA ; Store in PORT A tristate register
- movlw B'11111111' ; Set PORT B Tristate Latches
- movwf TRISB ; Store in PORT B tristate register
- bcf STATUS,RP0 ; Access register bank 0
- clrf RTCC ; Clear RTCC
- clrf PORTA ; Clear PORTA
- clrf PORTB ; Clear PORTB
- movlw 0d ; 13 bytes to copy
- movwf LOOPCNT ; Store in LOOPCNT
- movlw 0c ; Start storing at $0c in RAM
- movwf FSR ; Store in FSR
- clrf EEADR ; Start at EEPROM Address 0
- EECOPY
- bsf STATUS,RP0 ; Access register bank 1
- bsf EECON1,RD ; Set EECON1 Read Data Flag
- bcf STATUS,RP0 ; Access register bank 0
- movfw EEDATA ; Read one byte of EEPROM Data
- movwf INDIR ; Store in RAM pointed at by FSR
- incf FSR ; Increase FSR pointer
- incf EEADR ; Increase EEPROM Address Pointer
- decfsz LOOPCNT,1 ; Decrease LOOPCNT until it's 0
- goto EECOPY ; Go and get some more bytes!
- bsf STATUS,RP0 ; Access register bank 1
- bcf EECON1,EEIF ; Clear EEPROM Write Int. Flag
- bcf EECON1,WREN ; EEPROM Write Disable
- bcf STATUS,RP0 ; Access register bank 0
- movlw B'10010000' ; Enable INT Interupt
- movwf INTCON ; Store in INTCON
-
- MAIN bsf STATUS,RP0 ; Access register bank 1
- btfsc EECON1,WR ; Check if EEPROM Write Flag Set
- goto MAIN ; Skip if EEPROM Write is Completed
- bcf EECON1,EEIF ; Reset Write Completion Flag
- bcf EECON1,WREN ; EEPROM Write Disable
- bcf STATUS,RP0 ; Access register bank 0
- btfss EE_FLAG,LSB ; Check for EEPROM Write Flag
- goto MAIN ; If not set, jump back and wait some more
- clrf EE_FLAG ; Clear EEPROM Write Flag
- movlw 0c ; Units is stored in byte $0c
- movwf EEADR ; Store in EEPROM Address Counter
- movfw FUSCNT ; Get fused units counter
- movwf EEDATA ; Store in EEDATA
- bsf STATUS,RP0 ; Access register bank 1
- bsf EECON1,WREN ; EEPROM Write Enable
- bcf INTCON,GIE ; Disable all interupts
- movlw 055 ; Magic Number #1 for EEPROM Write
- movwf EECON2 ; Store in EECON2
- movlw 0aa ; Magic Number #2 for EEPROM Write
- movwf EECON2 ; Store in EECON2
- bsf EECON1,WR ; Execute EEPROM Write
- bsf INTCON,GIE ; Enable all interupts again!
- bcf STATUS,RP0 ; Access register bank 0
- goto MAIN ; Program main loop!
-
- INTMAIN btfsc INTCON,INTF ; Check for INT Interupt
- goto INTMAIN2 ; If set, jump to INTMAIN2
- movlw B'00010000' ; Enable INT Interupt
- movwf INTCON ; Store in INTCON
- return
-
- INTMAIN2
- bcf STATUS,RP0 ; Access register bank 0
- bsf PORTA,CRD_DTA ; Set Data Output High
- btfsc PORTB,CRD_RST ; Check if reset is low
- goto NO_RST ; If not, skip reset sequence
- movfw RTCC ; Get RTCC Value
- movwf TEMP4 ; Store in TEMP4
- clrf RTCC ; Clear RTCC
- movlw 055 ; Subtract $55 from TEMP4
- subwf TEMP4,0 ; to check for card reset....
- bnz NO_RST2 ; If not zero, jump to NO_RST
- movlw 02 ; Unused one has $02 in FUSCNT
- movwf FUSCNT ; Store full value in FUSCNT
- bsf EE_FLAG,LSB ; Set EEPROM Write Flag
- NO_RST2 bcf INTCON,INTF ; Clear INT Interupt Flag
- return ; Mission Accomplished, return to sender
-
- NO_RST movfw RTCC ; Get RTCC Value
- movwf BITCNT ; Copy it to BITCNT
- movwf TEMP1 ; Copy it to TEMP1
- movwf TEMP2 ; Copy it to TEMP2
- movlw 060 ; Load W with $60
- subwf TEMP1,0 ; Subtract $60 from TEMP1
- bz CREDIT ; If it is equal to $60
- bc CREDIT ; or greater, then skip to units area
- rrf TEMP2 ; Rotate TEMP2 one step right
- rrf TEMP2 ; Rotate TEMP2 one step right
- rrf TEMP2 ; Rotate TEMP2 one step right
- movlw 0f ; Load W with $f
- andwf TEMP2,1 ; And TEMP2 with W register
- movfw TEMP2 ; Load W with TEMP2
- addlw 0c ; Add W with $0c
- movwf FSR ; Store data address in FSR
- movfw INDIR ; Get databyte pointed at by FSR
- movwf TEMP3 ; Store it in TEMP3
- movlw 07 ; Load W with $07
- andwf TEMP1,1 ; And TEMP1 with $07
- bz NO_ROT ; If result is zero, skip shift loop
- ROTLOOP rlf TEMP3 ; Shift TEMP3 one step left
- decfsz TEMP1,1 ; Decrement TEMP1 until zero
- goto ROTLOOP ; If not zero, repeat until it is!
- NO_ROT btfss TEMP3,MSB ; Check if MSB of TEMP3 is set
- bcf PORTA,CRD_DTA ; Clear Data Output
- bcf INTCON,INTF ; Clear INT Interupt Flag
- return ; Mission Accomplished, return to sender
-
- CREDIT btfss PORTB,CRD_WE ; Check if Card Write Enable is High
- goto NO_WRT ; Abort write operation if not...
- btfss PORTB,CRD_RST ; Check if Card Reset is High
- goto NO_WRT ; Abort write operation if not...
- incf FUSCNT ; Increase used-up units counter
- bsf EE_FLAG,LSB ; Set EEPROM Write-Flag
- bcf INTCON,INTF ; Clear INT Interupt Flag
- return ; Mission Accomplished, return to sender
-
- NO_WRT movlw 060 ; Load W with $60
- subwf BITCNT,1 ; Subtract $60 from BITCNT
- movfw FUSCNT ; Load W with FUSCNT
- subwf BITCNT,1 ; Subtract FUSCNT from BITCNT
- bnc FUSED ; If result is negative, unit is fused
- bcf PORTA,CRD_DTA ; Clear Data Output
- FUSED bcf INTCON,INTF ; Clear INT Interupt Flag
- return ; Mission Accomplished, return to sender
-
- END
-
- ==============================================================================
- <End of TELECARD.ASM>.
-
- <Start of PICREG.EQU>.
- ==============================================================================
-
- ; PIC16Cxx Microcontroller Include File
-
- PIC54 equ 0x1ff ; PIC16C54 Reset Vector
- PIC55 equ 0x1ff ; PIC16C55 Reset Vector
- PIC56 equ 0x3ff ; PIC16C56 Reset Vector
- PIC57 equ 0x7ff ; PIC16C57 Reset Vector
- PIC71 equ 0x000 ; PIC16C71 Reset Vector
- PIC84 equ 0x000 ; PIC16C84 Reset Vector
- INTVEC equ 0x004 ; PIC16C71/84 Interupt Vector
-
- INDIR equ 0x000 ; Indirect File Reg Address Register
- RTCC equ 0x001 ; Real Time Clock Counter
- PCL equ 0x002 ; Program Counter Low Byte
- STATUS equ 0x003 ; Status Register
- FSR equ 0x004 ; File Select Register
- PORTA equ 0x005 ; Port A I/O Register
- PORTB equ 0x006 ; Port B I/O Register
- PORTC equ 0x007 ; Port C I/O Register
- ADCON0 equ 0x008 ; PIC16C71 A/D Control Reg 0
- ADRES equ 0x009 ; PIC16C71 A/D Converter Result Register
- EEDATA equ 0x008 ; PIC16C84 EEPROM Data Register
- EEADR equ 0x009 ; PIC16C84 EEPROM Address Register
- PCLATH equ 0x00a ; Program Counter High Bits
- INTCON equ 0x00b ; Interrupt Control Register
- TRISA equ 0x005 ; Port A I/O Direction Register
- TRISB equ 0x006 ; Port B I/O Direction Register
- TRISC equ 0x007 ; Port C I/O Direction Register
- ADCON1 equ 0x008 ; PIC16C71 A/D Control Reg 1
- EECON1 equ 0x008 ; PIC16C84 EEPROM Control Reg. 1
- EECON2 equ 0x009 ; PIC16C84 EEPROM Control Reg. 2
- OPTION equ 0x001 ; Option Register
-
- MSB equ 0x007 ; Most-Significant Bit
- LSB equ 0x000 ; Least-Significant Bit
- TRUE equ 1
- YES equ 1
- FALSE equ 0
- NO equ 0
-
- ; Status Register (f03) Bits
-
- CARRY equ 0x000 ; Carry Bit
- C equ 0x000 ; Carry Bit
- DCARRY equ 0x001 ; Digit Carry Bit
- DC equ 0x001 ; Digit Carry Bit
- Z_BIT equ 0x002 ; Zero Bit
- Z equ 0x002 ; Zero Bit
- P_DOWN equ 0x003 ; Power Down Bit
- PD equ 0x003 ; Power Down Bit
- T_OUT equ 0x004 ; Watchdog Time-Out Bit
- TO equ 0x004 ; Watchdog Time-Out Bit
- RP0 equ 0x005 ; Register Page Select 0
- RP1 equ 0x006 ; Register Page Select 1
- IRP equ 0x007 ; Indirect Addressing Reg. Page Sel.
-
- ; INTCON Register (f0b) Bits
-
- RBIF equ 0x000 ; RB Port change interrupt flag
- INTF equ 0x001 ; INT Interrupt Flag
- RTIF equ 0x002 ; RTCC Overflow Interupt Flag
- RBIE equ 0x003 ; RB Port Ch. Interupt Enable
- INTE equ 0x004 ; INT Interupt Enable
- RTIE equ 0x005 ; RTCC Overflow Int. Enable
- ADIE equ 0x006 ; PIC16C71 A/D Int. Enable
- EEIE equ 0x006 ; PIC16C84 EEPROM Write Int. Enable
- GIE equ 0x007 ; Global Interupt Enable
-
- ; OPTION Register (f81) Bits
-
- PS0 equ 0x000 ; Prescaler Bit 0
- PS1 equ 0x001 ; Prescaler Bit 1
- PS2 equ 0x002 ; Prescaler Bit 2
- PSA equ 0x003 ; Prescaler Assignment Bit
- RTE equ 0x004 ; RTCC Signal Edge Select
- RTS equ 0x005 ; RTCC Signal Source Select
- INTEDG equ 0x006 ; Interupt Edge Select
- RBPU equ 0x007 ; Port B Pull-up Enable
-
- ; ADCON0 Register (f08) Bits
-
- ADON equ 0x000 ; A/D Converter Power Switch
- ADIF equ 0x001 ; A/D Conversion Interupt Flag
- ADGO equ 0x002 ; A/D Conversion Start Flag
- CHS0 equ 0x003 ; A/D Converter Channel Select 0
- CHS1 equ 0x004 ; A/D Converter Channel Select 1
- ADCS0 equ 0x006 ; A/D Conversion Clock Select 0
- ADCS1 equ 0x007 ; A/D Conversion Clock Select 0
-
- ; ADCON1 Register (f88) Bits
-
- PCFG0 equ 0x000 ; RA0-RA3 Configuration Bit 0
- PCFG1 equ 0x001 ; RA0-RA3 Configuration Bit 0
-
- ; EECON1 Register (f88) Bits
-
- RD equ 0x000 ; PIC16C84 EEPROM Read Data Flag
- WR equ 0x001 ; PIC16C84 EEPROM Write Data Flag
- WREN equ 0x002 ; PIC16C84 EEPROM Write Enable Flag
- WRERR equ 0x003 ; PIC16C84 EEPROM Write Error Flag
- EEIF equ 0x004 ; PIC16C84 EEPROM Interupt Flag
-
- ; Some useful macros...
-
- PUSH macro
- movwf TEMP_W
- swapf STATUS,W
- movwf TEMP_S
- endm
-
- POP macro
- swapf TEMP_S,W
- movwf STATUS
- swapf TEMP_W
- swapf TEMP_W,W
- endm
-
- END
-
- ==============================================================================
- <End of PICREG.EQU>.
-
- The Security System:
- ~~~~~~~~~~~~~~~~~~~~
- The security of the Schlumberger card system depends strongly on two things:
- the metal detector in the card reader which senses if there is any metal on
- the card where there shouldn't be any metal. Circuit traces on a home built
- card is definitively made of metal. So, we have to figure out a way of
- getting around this problem... Well, that isn't really too hard! They made
- one really big mistake: If the metal detector is grounded, it doesn't work!!
- If you look at the printout of my layouts for this card you'll find one big
- area of the board that is rectangle shaped. In this area you should make a
- big blob of solder that is between 2-3 millimetres high (approximately!).
- When the card slides into the phone, the blob should be touching the metal
- detector and since the blob is connected to ground the detector is also
- being grounded. The fone also counts the number of times the metal detector
- gets triggered by foreign objects in the card reader (Meaning that the
- phone companys security staff can see if someone's attempting to use a fake
- card that doesn't have this counter-measure on it!) and this is of course
- included in the daily service report the fone sends to the central computer.
-
- The second security lies in the cards first 12 bytes, it's not just what it
- appears to be: a serial number, it's more than that. Part of the first byte is
- a checksum of the number of 1's in the 11 bytes following it. Then byte 2 is
- always $83, identifying the card as an electronic phonecard. Byte 3 and 4 is
- the number of units on the card: The first nibble of byte 3 is always $1 and
- then in the remaining three nibbles the number of units is stored in BCD code,
- for example $11,$22 means 120 units (Two units is always fused at the factory
- as a test, see the text by Stephane Bausson!) Then we have 4 bytes of card
- serial number data, 2 bytes of card checksum (calculated with a 16 bit key
- stored in the payfone ROM), 1 byte that is always $11, and then at last, byte
- 12 which is the country identifier.
-
- The Parts Needed:
- ~~~~~~~~~~~~~~~~~
- 01 * PIC16C84, 4 MHz version, Surface Mounted (SOIC-18 Package)
- 01 * 4 MHz Ceramic Resonator, Surface Mounted
- 02 * 22 pF Capacitors, Surface Mounted (Size 1206).
- 01 * 0.8mm thick singlesided circuit board with P20 photoresist
-
- The Construction:
- ~~~~~~~~~~~~~~~~~
- Since this project is obviously not intended for the novice in electronics
- I will not go into the basic details of soldering/etching circuit boards. If
- you do not know much of this, ask a friend who does for help. If you want to
- reach me for help, write to Phrack and ask them to forward the letter to me
- as I wish to remain anonymous - This project will probably upset a lot of
- phone companies and last but not least the guys at Schlumberger Tech.
-
- The UUEncoded Part:
- ~~~~~~~~~~~~~~~~~~~
- In this part of the phile you will find circuit board layouts for Tango PCB
- as well as HP Laserjet binary files which will output the layout when printed
- from DOS with the PRINT command.
-
- You will also find another version of the source code to use if your PIC
- prommer can't handle the programming of the 64 byte Data EEPROM array.
-
- <UUEncoded Part Begins Here>.
- ------------------------------------------------------------------------------
-
- section 1 of uuencode 5.22 of file telecard.zip by R.E.M.
-
- begin 644 telecard.zip
- M4$L#!!0````(``Q2,!V^G@!LQ@@``.P@```,````5$5,14-21#$N05--Q5G=
- M<YLZ%G].9O(_G/1VM@_K9L%)D^YD^D`P2;GKV%[LW.P^=620;6TQ4!!QT[]^
- M]8%``NQMLYU;SV0RH//3^=#Y%"?'1PM_,?8`X)4_G\+5>_L2YL])N,G3)"T+
- MN,?;-'\&%^41>-LR1C3-7S'4V)\O&`AF'V:^:U^Z[R\&$'SXZ/V+K?D3=_PP
- M\N`56PJ\NS/OGP\,<G)\#8H6_+]-8482<(J"K),M3BB,24$YE1N,/KGC?X#Z
- MX2^E^&]5S]<0W%CP5PB<"_@@!7/C-/PLD:.%<PCI6`HS0A3!M*19224RD`H9
- M2%OC:2MD@`M,!S!.=V^=D)(G+/&/'G3P5QK^2N$?<T+Q6R]!RQ@/X".I=S$L
- M%#CWC-.:&07GFID*92)_U&5G?;6L4+";;U%.0\[-'PW`'L+RF6*&O7V8NY-%
- M+])^+Y"W98$C*!-""PC3,F'L3XYO_,5>V-\%[(;0FGH\G<YT<IT:">IQFF;@
- M*GK/^W0[=NYZZ9>"WO-FP?1>6@YN8[0^.5YX]S,;^D62-EC@;9;F*'^&.67_
- MUQA^LR5NN`<7[<,-)>Y\#P[OPYU+W,4>W*J-6U2X"XG[]-B+&[;Y/<(</6%P
- MHBC'15%AY_W8+D]G\3!O;7!R?)3FZPHSM"RKV>L:W`W)P!^)"&*$T4XN6!?#
- M@?;7W>3*V"1-5F1=YHB2-!%.5VA[W;RQY,]^8^PS\WEHZ/N(8'S[A$-F<D:X
- M3FG*%_R)K[DK)_R]W&;`%DE"*$$Q^28YYVE)28(-+OYD\8?GZF"?.VJ9:8RR
- MLMA`S^]:6C*O(I<K%:(XKK:]=_R);@2^LD4D85))!HT\1UF:03\'IC,3PF22
- M8[HBN(^:K91Y`JL\W39L_@)AC%$.*Q%+QDE9MF7J0U%.`4G7@%6:"Q,*0<].
- MCI6AE\5*T$MW&@0S2^&=,.1`)2PL4?(9;&Z7.-]%M$]D5\BV0S3<1.D:*-GR
- M-'&T39_BG?`.V[:9F);UI@),9PM_.N$\SJ#`E%EP74C`CHM5+1M*<0,RPS=(
- M(5V;"__57.:8PFP:+,"!1<[($<4PYD)BG=DB\.=.RX(5LPI,%?@05[O#]>9_
- M<;TYP/6FE^LR_*%3L^2I"4RP<+40:4Z-O]?(.'/3&I),O&_1F?(W=#>:?41]
- M,^BJVB#KUH.H6U5E`5(`HO#:"C5#>9XS"OH-5>U494&8I22IS/3CSJT@GN=.
- M)_8@LV'G*MQ!@5#4BLJ:]Y#R87JN=8#1R=$M?R]TKG59]5;VV2;LKT&QB
- M+AT\"-5E\"P;IMFSQJ#=$6@,JJ6#.\L4Q),>2=;5D7)LX-SK6LSU<S6UF`>:
- MK_6Y@,AQM.T"%F].W.GLWTKURM0,KR5VUPE&_DB3Q)^,_#T^QMNZ3#A6Q/DM
- MGRO92"*/OJN$GX0Y1@462UGMDPK05:8&[/7G"(>KXEM]+(.FS1WA"JM.K$PH
- MB8'0-\(8=7U55FFXWJ6`D@C6F!U4NL6PY0H+?SA]802%1@1YGG]K9`:C)_03
- M>M8.H@KX&'@3,U5(R(@4O`-_<=2I=&V)2E07"=G7\V)?=PV&9RS</95(+O%B
- MK+J$EQB-KHI0UUWKVG#X&<BJVTOSC*0=K=&C2!$_DZR#)#S-;K,84QP=/"W1
- MH56@"B%:OC_OL+A1"L%#S!F#<54IE5%X3],S81RPB+^")*4@YL#_\,9RB=@^
- MW/]WB&@!8"0=<\CI=>.*\?Y,*.L;L[WH`"/N-SS&7ESC7+T6B.36K05W[/@.
- MUX]N[='X\:6?4D/W^8:,.,TU9"0-[GRO3FO2?8`G;-4#%[JAW[UK&?H>K4D(
- MDW*[9!+]9G=\Q-"><=-&2D-[OJ0S0N@@H^'_RZACLZ9/^HK#DN+VY@K0-5J5
- MR0R;`5HCDIR^+`[WQ],L3]<YVLI9*$[3[)3G034PJ:16B<C^W7;BMY5OFSE0
- M;#$T0K<)6T:D*(RD;OWLI'XDIS!-J^$+<UEU7*)_'C0W7K*OU"ZUX"-9;[2*
- M(!KI07/1I56$7&1H4C#+[S3;3:;&G5B=]@90\((@407^4N(DQ%H&Z4X&/(.(
- MMW^@N-0]NGTYHEE.+'W_O+$_DN?EDN8HI/":+8DI6&U=E,M&BH'5A]D1NA%`
- MWM/6SB94Y[9-OD%CJ6&W0'S#>=JXFB33A=4OHJK\+A)MFF#8H`)>,XJZ"?^.
- MAGU5QC$\<2,;L"8IM`N@'$8Z%4@IU,JH>N0)X^L!H8I7==_0^5W#/2D*7OJ=
- M,.1]`"DV.!JH^PEFGP(G$:\KBC_`"URJ?57)KYJR9R"4<Y"++0?4;Q$-:K'8
- M(M9/K$-L9/I+JZ7^.$41/%8N=6FU'-#N=T!&V#BM*(K2Y<`-O)%^QR5\CH@P
- MQE]*%'.9))=EN`^1YK#.,6+G-P"ZP8D,;`:4A1ZQ-7Z@,@![U`]2<:$@%[C/
- M%A1GD)/UAOX"7&WYE0;J6G[%2%$2-2<ZL#52)XFJ_07U8^N.1GAC5S"=@7($
- M%$5[FC@G:J0Q^K9]$VS$T[JZ@:O'625.=]KDP<$QHC7LFS9UC]8OM>O\2U4*
- M/M<-J]W@]AC6NFI9UNZUK*V3*V_F`3]M>S-3MXR%1\L\*KRSV)`5%3W"R3
- M\#D5\KCQF)8Z@EJ^KQTFQBNJ3<%=4<44+#Y*28'E$,R%T,JC8KXGZ><XP\SD
- M:GYF6IS*O,;55!.)$&QP7]_<:469OTQ7E>B\X9<5)]Q7_F5"-KYJM1OB/RU]
- MJTRCU&QZ#_F13%.S^2*FFBRF:]6Z:(W(8V`XA[-,<PH[`4LS7'U%(,+^9V=G
- MVLQWH.UI/N;]))[U'4ZG.M=7,KRZORVSSB3U_17Z;6MP_@6E61CF)75.EM\F
- MU/KJG%ZB]PRD.H.ZQ_D.'M5.)IME(O,S6_2T3ZKM#)3@->)?:0?BZ/@;,1+_
- M:$@J+K_F](Y.CN5=)?!J(LPU<\?MCR_RJ[&0^_3T5#*61_W5>F^;S_P[G_YL
- M6>:SW:(?MNC/SUO[79C/[]Z9SY>7YO/5U6%^[R_$URUO,CHY_B]02P,$%```
- M``@`2E(P'8XZ.`_+"```^!\```P```!414Q%0U)$,BY!4TW%65MSV[@5?K9G
- M_!^.LYY-.Z6]I.S8[GCR0$NTPU:W4O*Z?<I`)"AA0Q$*"5IQ?GUQ(4B0E-S$
- MS6PTCC0ASH=S\.'<`!X='LS]^=`#@#?^;`)7U\XES)[3<)71E!8YC/":9L_0
- M1UD$WKI($*/9&XX:^K,Y!\'T_=3O.Y?]ZPL+@O<?O'_S,7_<'SX,/'C#AP+O
- M_LS[UP.''!W>@)8%_[<)3$D*;IZ39;K&*8,AR9F0Z@>#C_WA/T%_\.="_MKE
- M_V\@N+7A;Q"X%_!>&=9/:/A)(0=S]R6D:VO,`#$$DX)M"J:0@5I0`^D8.AV-
- M#'".F05#NCUU0T:>L,(_>M#!7QGX*XU_S`C#IUZ*%@FVX`.I9FDP%+@CKFG)
- M2<&905.N*?('777V%]L.I;K9&F4L%-K\@05.#Q;/#'/LW<.L/Y[O1#K7$GE7
- MY#B"(B4LAY`6*5=_='CKS_?"_BYAMX15TL/)9&J*F])(2@\IW4!?RWO>Q[NA
- M>[]3?B'E/6\:3$:*.;A+T/+H<.Z-I@[L-DEQ,,?K#<U0]@PSQG^7&'YQ%*ZW
- M!Q?MP_44[GP/#N_#G2O<Q1Y<O`]WH7`?'W?B>FU]CS!#3QC<*,IPGI?8V6YL
- M1^?<G3_,6A,<'1[0;%EB>K9MUW/=0']%-N`/9`1QP6BK!NR+GF7\ZTYRU9B$
- MIC%9%AEBA*;2Z7)CKMNWMOHX;]OS.$UC?.%"*4I4/)=^4B:MO_15`,BQX[^*
- M^1>@B;AV+/XM;/W"]8AO1S[IR2?GYTWIBPOQ]-T[\7UY*;ZOKFK,]453VC8=
- M[`;N.*DK%?LJNAYD=$G_;RQOZHO(-Z$RUYP^X9#1C`LN*:-BP!_[1C0*P7\4
- MZPWP0<*G)B@A7Q6Q&2T827%#BS^>_^[U.R06&T/1IN`6[_C<*$?)RL0D]BQ$
- M25)..W+]L;G'8F2-2,JM4@IJ>PXV=`.[-?`U<R.:2C+,8H)W2?.1(DLASNBZ
- M5O,KA`E&&<0R530<R';LYGH8RA@@Y?D0TTQ2*`T].SK41"_R6,JK:+&"J:WQ
- M;A@*H#86%BC]!([@)<FV$=ME<E_:MD4L7$5T"8RL118\6-.G9"N=WW$<;J9M
- MORT!D^G<GXR%CC/(,>,,+G,%V`JSRN'&H@2!G/@:*:UK:Q&?2LL,,YA.@CFX
- M,,^X.&(8AL)(;"J;!_[,;3%8*BO!3(-?TNITM-[^+ZVW+VB]W:EU$7[7KMEJ
- MUR0FF/>-$*EW33PWQ(3R)AM*3#YOR37MK^5N#7[LR%0JY)QS5;M%<(=T\VR0
- MTJZS!BGED#ESV)Y9>;Z(-9(N`3$XX3(<&[@C0\G=+.C@2B5\R%BBY[D#4[0*
- M+:;3<EE>!,^>UY],_P,@-NG[0TM#Q"QCQPH&M4K,RJ<08%1V>:IA>(TW<!+B
- MK50T<,U]OE&STQ3+S0$:ZS6615&SYX\'?IN4DCW1X&VH2%F1X&CQ7/))4F5G
- MEW@_#3.,<BR'%#0S`-T-J`"M#9A6V`B'<?ZU<B6K;G@'N,1J+RM21A(@[*W<
- MP*H4Z9VLM=Y30&D$2[X5.5UC6(L%2Q\^?N5VAXWM]CS_KA%$C>[03]E9>\=+
- MX&/@C4M@`S(@N>C%7^TB.K/9,FE7^51U^*(N5@6VX1GS_IZDK89$W=(%]36D
- ML3@/S;4;_1L./P&)NUVU"!]C:QOE7)GXB6PZ2"):F?4FP0Q'+^Z6;&9*4(F0
- MS=^?MUF"E%SJD"<.:U@6%4V**/\[SAHO,.+'D%(&\D3XA^C!%HC/(_Q_BX@1
- M`(U$V3SN['3C4O'^[*UZ2,Z];)8BX3<R%9W8H>%ENY)RZ66MG%"=QJJDUSXK
- MWL`]W[YXU_G0T-=.E(8^,?1#$OX^WU`19[B&BB3KWO>JM*;<!T1KJMO%W"3Z
- MW;L6T2.T)"&,B_6"6_2+T_&1QNJY-J/W;ZQ>#)F*$'I14>__5=3AK)+UON"P
- M8+@]N09T22LS68,S0$M$TN/7Q>'^>)IF=)FAM3HV))1NCD4>U&<+G=1*$_G/
- M72=^6_FV/C+)*7J-T*W#E@MIB492MW]T4C]0!Q9C5;U7YK)RNV2K:=5W7ZH)
- M,JZWX`-9KHR*('M.J[[R,BI")C,TR3GS6X.[\:1Q.U:E/0MR41`4*L>?"YR&
- MV,@@W29:9!#Y]'>4%*9'MZ])#.;DT+>WYOLC>58L6(9"!B=\2!X8]=1YL:BM
- ML&P#([KNRK7DA9I<[1G_"$K3KU`3U.O6A:\XH[6'*3'31O.BH$SK,K^*SG*%
- M<CCA$J+3EJG8[,H[N5G1%1=)`D^"VP:LS@7MNJ<:YD[AT0MJ)5(SX"3G9ASH
- MFE6>R#N?&QB1/!<5WPU#4?Y)OL*1I4_PG)\<IY$H)UH_P"L\J7U7*>Z:-L]`
- MF-"@!EM^9UXC-J3E8$NX>;73$FXD^$N[M?PA11$\PI:P%9Q<VBV_<QI^5_LJ
- MGZ;R55D+E<M!/_`&YBV0]#DBHQ=_+E`B;%):%N$^!,U@F6'$]\\"ML*IBF<.
- M5/4=\3&QH2KN=BP_H/+(K0:$S^8,;R`CRQ7[";B*^=@`=9F/N2A*HWI'+<<0
- M==.HG%]*/[9N,:0W=@TS%6A'0%&TIW=SH]J:1KNV[[`=B6RN[ZBJD[<VIWO(
- M%,$A,+(CW'7(-#W:O-6NTB[3F??<)-:XPMU!K'W58M;9R:QCBFMO%@$_:7LS
- M7VZ12(]6>51Z9[XB,9.MP=$AAXCC*61)[3&MY4AI];QRF`3'S#C\=DV5AU_Y
- M5DH9K,Z^P@BC*FKE>Y)^AC>84ZZ/S7P5QRJOB67J@X@TS!I5=UM&+18/:5R:
- M+OI\>3;3";E;]55";KS6:O?!?UKZUIE&+[-N.=1;,F.9]2LQW5OQM98=B]%_
- M/`8-YW`7-&.PE3"ZP>5K!"+Y+TMS1W6GVZG?YOT@G=753:<Z5S<QHKJ?%IO.
- M`>K;*_1IZ[S\$TJS).8U=4Z5WSK4=M4YLT3O.8>:"JH>YQMTE#,UU2Q2E9_Y
- MH&>\4VUGH!0OD7A-:\FM$T_D2?A[0U)K^3F[=\#_O/'@Z/"_4$L#!!0````(
- M`)M$+AW$&QM@"@4``#P7```,````5$5,14-!4D0N0C`QE9A+C]LV$,?O`?(=
- M"-W;D#-\"3T4BM9)W.QZ#5N[27LI@F#1YM`'VGY^H"3%&;THRX8!P?)_R!^'
- MG*&'_*'[\N=O?WUW_OK[RQ]?_OOV53RK[T&^B//+/]]>_A7[_>M777-X__CK
- MN?VP>VBZ?2M4^#2O7YT_[':=D.&CE*U1>+!>V/#[_I>=0.6,4";\;)TTPIC:
- M#;^]?O73TZ$56DLI(#SRNX'X;OE=QW>#PSO&=S6\FZD]`NO'YM0)[>)[A&BL
- MP\.%T00YCR8-/#UE\BBT:KKN)*KNY^.N$K6H/G?-?=7WHKWL+9&L[G;G_?M#
- MTSV>>EN5+8V96W[^,5E4/25^6$F`2YJ>:<?](6-4')7F;^S*I)-#\Q!<45)4
- MC^<6X@@A-U"V'V+H,'@26E=-D(V/<K!1X%G/0&0@7@E4!,0B\",!<0P\[=JN
- M(:8D_](JYG7='>[R`H=5#6VB$3J)`FR=S)W0$(90;Z_P<=\JVWI=]11,,W-A
- ME9^"2QA#`7%N^;2ZR@-DKJ?)E>1#^@8IV@1<GMQ3$Q>S;QDFS\%\;N/41P6\
- MCQV/UE(Q3MV`PXI:%G%Q-*J(`\;!#3C]YM2U;47-B\PX)"@RD9E(3+7%?&CO
- MPQ+GID6>CG*1IYFGB>>V>.\/=Q6U+.),E(LXPSAS_92^E6_VAZZBUD6DC7(1
- M:1EI;T#&(+3K.!?E(LXQSMV`@XI:%G$^[T9+G&><OP$7X\^OX^HH%W$I;6M*
- M^!3B6N!62BA*^-B?DGJ1\3ZG?'J,=V_%/'4#3U+&K_%<SOD%#Y@']%!;O/QO
- M`9>`-B?\`H@,1-YHK@`"Y?L:T.2,7P`U`S4!W1;P.>UG^A)/YY1?\`SSS/4K
- M^-91MJ_Q,.?[@F>99V_@64KW-1[DA%_P'//<#3Q#^;[&H_ICP?/,\S?P-"7\
- M&D_FE!_S<CDS5"JZ)OBRG*'Z5:"*]:I'%2P#W,!5]6K;'"N!QL22*CQL'*$B
- MJ^?F_JDW`Q!_OR/#.*3:7BAY8IKTIG%T-GO=G%J!UKM<3((12J-P.H[J?G_8
- MA2;LB\%L)D>JA:Q:LANKL84,G>:VS@SUTJAC&)IN%*--]&%2^JI9Z8LX+7U5
- MIO'PTI+10"_3WD::)YK6<US4^T(<\G*6(P$I$HSD2-"W1H*Y-A)@,Q(4F>IB
- M)."E2$".!"Q$`G(DS-78`C@2<!D)R)&`-T4"7HX$+$<"_]700*^,!-R(!%R+
- M!%/SU(2OHQ,UNJLB87]^=#[^=::.E)67C[%/4`D+_8%J9LD'')NJ7*]F.I-&
- M1HM.V*ATL$U#A'3$M/0-MA;TTZF+SD&V7QXSH^_.1WE^KNUYP#RXAM?>?R0>
- M%'F.>%#F2>;):WBG,_LGBSQ//%GD(?N'?26VP;MKNB8#L>P@9""N.&C909L*
- MHPU@*HQZ!VV19\A!6^9YYOEK>.GDU?-\D:>)Y\L3R@N8OFW[=SS2?)87$&D^
- M5Q:0$P*O2HAW3^<=`<L9H0@XR8A<J?3[1)P9ZVCK&5<JG_:G7;ZI2_LOY#(Q
- M*_T16(X/PUE)T312Y-!FJ&I-?DP4P]=X@V(T[Q7KBN7[Q;XWSCH^QBX4SDSJ
- M#1<A-E'X0FRD:#U51B/`R;S!R%-6^-)B,M>3I!ISTM"+J]#/J)XJH_]+VA.6
- M"N92G'I35)J7%>"SY4B!R0&PO\4=/.V5X3ZWCY!Z<;$Y428WD(NHPCG'T)[.
- M]R0+A??]\:C!CJ^KELIPZ_P_4$L#!!0````(`*)$+AW[.7CW$P4````@```,
- M````5$5,14-!4D0N0TU0[5A;3QM'%#Z[W@064R#@A$L2V``-A!C8F[VFBE0M
- M:R=UPL6RS>4!J5()2I`01B0OE?*`JDK]#97R`_+8O%1YJ)I(;=0^]*&J^`'-
- M#ZC4]Q*[Y\S,WK*_H'0/:[/S?=\9S^R<F3TSFS*X`"L`51G*%\`M`4"S"RHR
- M_M<T$V2E\^[ENY?0#=7&NE,RBC`MU:J>4?1*-I"=:)IFD.S5F]_>0A\TUN\;
- M)9B0MION2B"P(O4P(B<S-\8'U0T1:'+0_[4!F;DSC'E6,@AH.D>\UM&7Q_N/
- M'C_59KU;FK%46LHOZ9KK>945K;FW^_BP==!ZM+_W)*]5#W<7-&-!SVOKM<H:
- MM#/![X/R]^OI7R4IUR<K$FLC;&!S90FHN?5JP],JE5I]?55;W=\];NVV#I\>
- MMPX.]HY!!>@Y;3_OE._D)0#\*'77A*Q!:"F&6I`U"3UM1U%[L=[T/,A:1!VU
- MW8!:]5;JD+4)[FW?"^![:V7(%@A]\3Y2S[*^6%UK0K9(3#G&&)!U"/WS+(J:
- MT>Y+V1(IGL44V-XEZ/E.>=Y1[IRV`?"#[<7:<&@1+L5@'6&'X-.V%,#K#8_D
- M1<*/VG(4IT=4(+RWW17@F_0@#)O@%^\CM2\["%L$EV-P$6&3X#_/HG`!88/@
- M9S'81EC'\9+Z`4;.OKX?=O^K#'[)@^I#J/T#%^7![KST$.B&ARO&PJ?@%[HA
- M"%55DE2054F&_[SE8!#'/0.=SIRT5FE^KNN&YAO.0J]>-G9@@&8;?0'U6`)?
- M:B:E.9+FDE(K*1TCZ5A2:B>EXR0=3TH+2>DD22>3TF)2.D/2F:3424KG23J?
- ME):24IVD>BC-R^SFI/+)SF=NO;SEUBL[8GW;$4X0.$]E(!,L=A+^;1MTL1HN
- M_O3MSP3-9*`KMG(2N&'0Q71;;[[X0>AZV#+IUI@$IQY>IJD=W66ZS1]?^_5E
- M8SJ#KJCNF[>$W\Q`;W1Q9C]KTL5DW_\R^HJ@$04GVQ`)EV$9_[&XH3(C/B;"
- MI;<.&RE61L*`X="#A<^P3]S\P(/*8PI._VM$.."M/,#?9W%TS:<TH@I`RTH7
- M"QZ&I)8T&7['@.MT%.A3'5SC\+FIM.I!#HLJ+\;>^*FEEMHY,0G?-G^P^=_I
- M9(.%$]\;B@-S=*M`CVK!1;K%-"&UU%([5S8$?^'$5OS$:9IFN@VTU^SBZ=:T
- M3]TBJ@3U1A.3!I8U$W*5J$6B3"B[31>7%)8F+_INM*,_*<)6G=QTHDR?*A)E
- MP6:MQA):M*)?HT.4`7<W&A40NRR'N5EPB>>#;"NI\.SRDJ`N$_4`V.Y3X6GD
- M95:C`X.LP@)WD[G;H."N,*[(_23N1]@H<B.\(;2U5W@[1@0SRCM-VWO!$#*.
- MS%7>KV"+K_#LE.#K2%_G3\3?N0OV.NN#`Q-\!-@A@,1SUPE!W6!ML:-I[0W1
- MF"F>\$;&;4HPLSQ+IM,`A0_;KFQ(`N!UV;@]3^9W:%S7_*`R@D;E-(+`$=
- M`8F0N"UB+\]B#Z/%-7PJ+Z@%1F&(X5F0PF?_@J`,1N%4P(,<A<]^0U`6HW#^
- MX&&.J-`2E,THG'1XH",H6U`%1NE`ASJ"(FBDFY]1B!.,<#^-1"XDS!@Q%A)6
- MC!@/"3M&3(9$(4;,A$0Q1LR'A!,C])`HA<2PJ@/E62>XZ]X[?K+?.@1CP=2A
- M7\4G]5%T<X;E/E[VM^,<[/\`[%/Y4"*VC8X#6+P@BNR(=L!/[WP@M=122RVU
- MU%)++;5S;/\"4$L#!!0````(`&M2,!W64,AT+0@````<```,````5$5,14-2
- M1#$N0T]$[9B)=Q/7%<:_T6BS,<88`S88[)`V59O$C$!F20)8ED9&P9:4D80#
- M66P6DZ0A"0424A*2:VP<.\ZBD(V=[FW3EG3?V^;/Z?_0<TJ_N=)(0QN?TT)[
- MNO%T_(-OEC?OWO?N)\T+X-::@?_NUG)\XO#$@:,'XWW)XLA-W!^);RI.'-F:
- M^)/9:L7[K`V]#OO;=VSB(/[9S40847Z:L!A!?30_U1:*;TIM2=Q4KX.US__&
- M;-YN_VAKBU7_O0:S]6.,]*YOG<*UUK[6IMKYJ14'\4=K$G^VSN"Z-8.I]DGC
- MC#%CM%AS/!?MF&J/1L^AQ;K`OVG,&4W1L[V"Z>:YY@N+8C%>T1Y=.M5>L>9Y
- M]6QG?ZRJ5W?WQRYJ'YW16;>?Y?/+RE0?\6^V8W[E5'M_;+[3B;7QOBB?&>J8
- MZ=P?,Z)7,6F4K9Z`N68\%K#.877'?%L41O0\+N$RQJWN@-DU&3,[)V.76]S/
- M$NMR:$VT9?LT$+V"B'4I9':=BEU9?&G1R=B5GE";>_=,SUQLIGLN=JZYVMNX
- M=3[0&3T?,+LKL>H5IR.3B<$$$DL3ZQ(;$^E$.7$H<8)J^N9*[C^JA9/I5#YG
- MU<H_6M/QN@Y1%RW/'L)5'?=T!,%D>BCO=68$7)VUT;C>U9FZ-ER=S_F^/-B?
- M8Q<]W83P8+:4RI5JN@M&RC=87A].)9UT-ET[<!8A:F=/XWPPM;,^7!BFZGA=
- M!Q%).>FQU/`N[WK5Z5*RT3^UU[_14CWO%$O>^/7\J%V/G]I.9VOCQ20":=^`
- MW>O3O@%2AVR;$?OBM>T;\EW5&VX\7_`"C+DZG:P-U[T^:-LWYILZXX_7ML<R
- MP\FAJEZ-4"8Y7+0;^3(S10>^Z\.9<K&1_TY>7R[:7KI1@3G4>)P;?RB;2V<=
- M7_ZSN7HVZ"X(9W.EE#?CQB+W?,GV/\_5Z:'&^*G]ZR5"/9+,UCH80;2FJQER
- M]/[==JK>GYEU"O[Q18;S^8(7D+$*YG!Q$+[U%&QTSM8/<\1_/H)`KKZZJ^LC
- MEQ]S\EZ$IZJZZ.G]B%1U;0+']?RHXYV?0SA?*&7K^>!Z**0R0Y:O'EP=;\1O
- M%E+#\-57F#I9VEG3S0@4TK[QF;P_F^KW?,FX;JCN_RN]J:Y-U9OK.N+JS7'_
- M>+*-GQ:J\XZW_&"$JGK0YP^N3C7R9Q8:Y:CKK=`HQVI\Q0WPQ4>=],<3+HRE
- M\Z.Y1CT[@[[U7M49_WPZ@X6R?_X<?WY8[YP\=TE4#YR$Z11\XPNYVC<^KD=&
- MD_*/URGYUG_0/>\;3TAUQA^/4RKZ^P\72\E2N=B8KY(]4G^BT5W57D:,-56]
- MT=-KJ[H^'ST(NWK,ZV]]38_6=!\")?_Z#?)^)UOTSY^K_?/G:M_\!4M.V?;%
- M'RJ-Y<NE1G^!4><&OPN..G;.%W^(VG$:\V7NL7WY,LA>]^7K]W;+!N(,:M
- MOIW<;G_/&UP47>C%-@,#D8'6@24#N-W^;]JMOO\V\_O!L8?Z[(?*-W'W[?9O
- M;]>5@4\^G:*LZ+Y`1=VX8BK='0A#CQMZW-#C1NUX2!E61I1199.R6;E(V:)<
- MK&Q5+E&V*9<JVY7+E!W*Y<H5RI7*3F67<I5RM;);N4:Y5MFC[%7>H5RGO%/Y
- M&>5GE7<I/Z>,*3^O_(+R;N4]RGN5?<KU2DL9UR^Q!5C9H-RH3"C[E9N4FY5;
- ME%N5]RGO5SZ@W*;<KMRA'%`FE8/*E#*MM)499>V5H+)3F54^J-RE'%:.*'/*
- MO+*@?$CI*(O*DK*LW*T<53ZLW*/<JWQ$^:CR,>7CRC'EN'*?<K_R@/*@<D)Y
- M2+.X`"M/*)]4/J7\HO)IY6'E,\IGE<\ICRB_I#RJ/*8\KGR^ONJAJQNZNJ&K
- M&[JZH:L;E6;E(F6+<K&R5;E$V:9<JFQ7+E-V*)<K5RA7*CN57<I52J[N7KBK
- MNQ?X&[9UP_3^S[4?)-<B0O:XA)(5$.UU>[I#ZWR=]GJG^Q,YL`!9&XR?M>%F
- MP6-(R5RT*>4N=U.2->-FQ&.3LEG)O+0I)09FAQ7%[+"BF!&Y6WD/F!>Y%\R+
- M](%YD?5@7L0"\R)Q,"^R`<R+;`3S(@G^>H'T@WF136!>9+,;N6P!JUZV@E4O
- M]S%FR/UN@N0!,&+9!D8LV\&JEQU@U<L`XX`DP:J708X4K!Q6O:25-EC[D@%K
- M7X;`VI>=8.U+%JQ]>1"L?=D%UKX,PR)'P!J7'%CCD@=K/+``I0#6/NN)M2^.
- ML@@Z@)1`!Y`RZ`"R&W0`&04=0!X&'4#V@`X@>T$'D$=`!Y!'00>0QS!`/@XZ
- M@(RY^[HR#CJ`[`,=0/:##B`'0`>0@U`'D`G0`>00Z`#R!.@`\B3H`/(4Z`"L
- M'#J`/*T\#/J`/`/Z@#R+`OD<Z`.L'/H`*X>4H\ICH"?(<=`3Y'G0$^0%T!/D
- M!.@)\B+H"?)ET!/D).@)\A+H"?(RZ`9R"G0#>05T`WF5;]`0`=V@,LFW:\AI
- MY13H"3(->D)@`<H9T"MD!O0$>0WT!)D%/4'F0#>0UT$?D'G0!^0-T`?D3=`'
- MY"T<(=\&?4`JH`_(.Z`/R%G0!^1=T`?D/;Q`OH\3Y`=XD?R0;Y*0<WB)/(^7
- MR0O<&X!<Q"OD);Q*7H8PBBO<(X)<57X%I\FO8HK\&KA'*5_'&?(;F"&_B=?(
- M;V&6=WV;.P>0[RB_B]?)CS!/?@]OD-_'F^0/\#9YC7LTD(_Q#N_Z(??'(#]2
- M_ACODC_!>^1/\3[Y,WR@\_]S?$C^`N?(7^(\^2M<8!87H/P:%\G?<,<5\EON
- MND)^ARM\VN]QE?R#\A.7@85Y:@$:G\;;[5_8_@)02P,$%`````@`;5(P'=:1
- MH<KU!P```!X```P```!414Q%0U)$,BY#3T3MF?M[%-49Q[^SD[WD0MB$``D$
- M$L#JMM8P&^Y>('N935:2W75VEP@8$X2@5E3*15!1WY@0P6B[O0,"]M[6MMCZ
- M5_5_Z/.4?N>=G=VAFE^H3WVL.?OPR7[G7/:<][SGN[.#B?^N&`CAZUPZSLV>
- MFCU^YL3P4*H\<1_]H\G=Y=G3^W;^T^RTDD/6\*##\8Z=G3V!+[NT((I6OMK0
- MR?<L,;Z\$D[NSNS=>5^CINLO?S=7RC>KI.>ZL&-K-7OAY$+7U_PHKY3[*/&$
- M]_<.S,Y/,3:XO7,>=SJ'.EOK]?/K3N`?UAS^95W&76L1\]USQF5CT5AEW4"'
- MM8"KQORZ6,]\=RPF6&B[VG:C?4N"5[IC7?/=-6N)_:_T6@E/;^RW$A\9'=95
- M],:NL":V=FE-E>H3_KO2L[1^OMM*+/5.).+L%^,GA7L6>Z<21NQCS!E5:R!D
- M;CJ:"%G7L+%G*1Z#$;N.F[B%&:L_9/9=2IB]EQ*W.MS7:NM6>%.L8_\"/?(V
- MHM;-L-EW,7%[U<WV\XG;`^&XVWMQ8"&QV+^0N-;FC39C70_UQJZ'S/ZEA-?B
- MFU$BJ6RF6+#J]A^KZV1#AZG+EO_U$/%TTM=1M*2RHT5_,"/DZKR-9GM7YQK:
- M<'6QT+QY<,=S[+*O6Q%)YRN90J6N^V!D`I-UVV=2CG.XJ5LR8XWIP3!5)QN:
- MWYD9)SN=&3_HMU>=K:1\'7%U/EMOW^'5.^6*/U^MG[0;ZZ6VL_GZ_'`)H6Q@
- M@F[[;&""U&';Y@H#Z[/M>^+KZ>%[ZTO^`K>X.INJ3]=MWV+;]\:7.A=<KVU/
- MY\93HY[>B'`N-5ZVF_$R<V4'@?:17+7<C'<OVU?+=M9OL`1SM/EQ[OK#^4(V
- M[P3BGR\THD$W021?J&3\'3;:W?J*'?P\5V='F_.G#N9'E'HBE:\/,(9877L1
- MFM#^A^Q,8SPS[Y2"\XN.%XLE?T'&!ICCY30"^=/2')S%@CD1K(\B5&ADLY<?
- MA>*T4_17>-'395]/(>KI^@8>U?I)QZ]?0*18JN0;\6`^E#*Y42N0SZY.-M=O
- MEC+C")RG"'6J,E;7;0B5LH'YF>R?S^SR;_V,NX;J7?^A=S>TJ7I/0T==O2<9
- MG$^^>2NINNCXZ0<C[.ETP`]<G6G&SRPUCZ/F6ZEY'+WUE8<16!]U*KB>2&DZ
- M6YPL-,^SDP[DNZ=SP?UTTJ5J</^<8'QXWKEY;DIX%\[#=$J!^85='9@?\Y&K
- MR03GZU0"^=_BU@?F$U:="Z['J92#XT?*E52E6F[N5\6>:'RBT>]I/R+&)D_O
- M\/5F3S?V8P`15T_[XVVOZ\FZ'D*H$LS?%O9W\N7@_KDZN'^N#NQ?2\6IVH'U
- MARO3Q6JE.5YHTKG'[UHF';L06'^8VG&:^V4>M@/Q,&`<0:`_VQ^93C<,Q%BY
- M`?W?%X/W6GT81)^!D>A(Y\CJ$:17I;_L3UDI_Y_//]KX?>'8HT/V4]7[Z+U2
- MOO)R5QGZ[(LIRIH^%ZJI.]?TB6'-?0)EZ'5#KQMZW:A?#RLCRJ@RIFQ5MBG;
- ME1W*5<I.Y6IE7-FE[%:N4?8HURK7*=<K>Y5]R@W*C<I^Y2;E9N6`<E"Y1;E5
- MN4WY@/);R@>5#RD3RF\KOZ-\6/E=Y2/*(>5VI:5,ZI?:,JP-*W<H=RIW*7<K
- M]RCW*O<I'U4^IGQ<^81RO_*`<D294J:5&656:2MSROI/A-J8,J]\4GE0.:Z<
- M4!:4165)^93249:5%655>4@YJ7Q:>5AY1'E4^8QR2OFL<EHYHSRF?$YY7'E"
- M.:L\J5%<AK7GE2\H7U1^3_F2\I3R9>4KRE>5IY7?5YY1GE6>4YYO9#TTNZ'9
- M#<UN:'9#LQNU-F6[LD.Y2MFI7*V,*[N4W<HURA[E6N4ZY7IEK[)/N4')[!Z$
- MF]V#P.<8[X?IOV?NMY";$24'7$+)$Q`;=$?:XO[,=,\`WRA#RQ`!QK?"9*]M
- M+O$YQK<APMH'7$+)$Q4E'U1/>4A7D'!OSWFB&%.>*#>R/L-*QC>NE(?YY!L\
- M:6Z4?;8JVY2,=5PICX`1YSEDQ'D.&66QE$DPUC(,QEIV@+&6G6"L91<8:]D-
- MQEKV@+&6O6"L91_OB""/@K&6Q\!8R^-N-.4)T$ED/^@D<H!QA(RX0>=YXT(E
- MK<RX$9(L(P&QN7I(#O23T#*443`J,@9&1?*@S\B3H,_(0<8`,@[ZC$QPE9`"
- MZ#-2!'U&2J#/\!1:?.\HRZ"K2`5T%:F"KB*'0%>12=!5Y&G05>0PZ"IR!'05
- M.8I]NAO/@+XB4Z"OR+.@K\@TZ"LR`_J*'`-]19[#"'D<]!4YX?YO@<R"OB(G
- M05^1YT%?D1=`7Y$705_A>:.KR$O*4Z"WR,N@M\@KH+?(JZ"W\+S16WC>2#FC
- M/`OZC)P#?4;.HT2^!OJ,7`!]1BZ"/B.O@SXC;X`^(V^"/A-:AG()=!YY"W0>
- M>1MT'GF'O\\A`CI/;8Z_W2'O*N=!_Y$%T'_D,F;(1=!_Y#W0?^0*Z#]R%70>
- M>1_T%ED"O44^`+U%/@2]17X`>HO\$/06J8'>(C\"O45^#'J+_`2GR9^"WB(_
- M`[U%?@YZB_R"OT<AU_`:>1T7R!M\P@#Y"*^3-_$&>0MO<K:W^:0)\K'REWB+
- M_!7>)G^-=\C?0,C?8H[\'=XE?X]Y]OH#GS]`_JC\$RZ3GV"1_#/>(_^"*[K_
- M?\7[Y!T^ZX%\B@_8[V_XD%%<AK6_*S_3*\MS:AF&OH@KY2LK_P902P,$%```
- M``@`0$,<'6ZKZYS`!```8A,```H```!024-214<N15%5E9A1;Z,X%(6?!XG_
- MX,==:9M"TS19[1,!TB*E!1DZT<Q+18F3H"70-=!T_OW8A@2;V"3;EU:IO^.+
- M[[G7E_P#`L\V'^RO+_"<)KA(BKS"198A#+P\R>HU`HLT0[JF:V3AY!YT/^B_
- MFOTVOLS-AOP^2I%%$)6H`M]14A6X`2?7@!,)^"`%QR+X(`&G4G`J@M-S<&I*
- M0<,P.)`L.@-G\L,1P5G_<+R7Z+MKR\%[8<=;PGIYA7#]T>%4P/'@X,Y>ODXQ
- M6<\R2;;?`FN]QJ@LZ=]I211U#48V%X2H8C(5B.(,1.D>`3LKDG^!7=0Y0P-[
- M"53H7?,$N-CB>']$P+(X@/FO"NE:&%G1:RAGQXP-J[BJ^4@7(?^TL@-CCQFB
- MC#YRQP4^C"P%-VG"+'`%+.#=^CULKL`>.FPNP?@#Y;%IA]D]S')L_\608S/1
- M?]:M0PZ452O+J4%IZ'*'*=!_2^E/A&E"("KKC#\LUW4L_K14<<SN@>L&T'\&
- M3ES%@@`)YHI0.H%S3P;VTHJ>Y!JQU%A/Z78'YFE5LKHB1RF'W]NR(`@K)NX8
- MVZTCZ(57F\5AU946>4_@:MNH!*XVD$R`68GK9?_#2B;-WW5TES].8'12N),K
- MR!T@*-SIFA]$GBJ%34_R/WH/K6O/PK'+SNVY**N;,-WFZ29-XKRBAM&UY0!G
- M,&Z)8AD8P5=7!I(C^"%4H_"OA;4,>>RTG:Z]^$`>"7V\LX8(_M@8XS];T^N:
- M;4'X8_`Q[!CC7TWH0L>_M-CI29]GPTFW:24B:GT%\O-M[D6#E\E/A(MV[4#X
- M_;7!F^.O%%X:M^5T(*?I%(>\)1RUNIR(WOQ75>S-S;2*JV2W+K;L'KWQZZ.%
- M5!F_!,+`4(*3]M9N;1+$V].E:%"2'W-D_4E*FKKFP>!"@9WFC;:EI_FVJ>FC
- MTJAQ<MNB>2>_=TZ&<V\Q;$XX;WI@LHMS(IR>^ODFB[?L!E`*-.XC*[A;8,$H
- M&*FW;4S%1B7_$^%-5ARZB:S%YYZT&W2N.49M[T8=[.;Q.YVR241*_%Z,F<=(
- MT$IL(@]Z=((M1PT_G%\4`NNZU[%=DU_AM$*BR*.H(7'48U:\Q]GY<U,7M;<$
- MYZ*9V;DH"(T++2[`J$QB^L)#&%H:0:@N#5."F!3A+CK%",PC=Q3AYPMI>SDA
- M5EFFVWR/CE<.%$TB<0E+-[VJR*FYZU/]4E1^)?6<TJ)A4>.D@ZD[G<>A;'<9
- M$C:=!Z_#"6Z'H:#.LIOZ0\AO.Q+S76+6Y==R^`E!EE]QTFUZ=GA(JV3'K'^A
- M171T22>-7K5;SJ/0NL_SWN/#*L9'V'X2O7GN`#%T>Q?G.<JX)DX4!*N>^V!0
- MP61#HA#$>49[#]"\^W4A4`'5"_/T&H%3BDVAA+D4!_;B416CT5C6,FZ@-:;;
- M;-)MC6,V%1[+F>"J",W+.(VO'885\<&!0:'WZM_V0(CB=?/"U#AA);[1RCJ.
- MM(L*$JZR#NX&))I*ZT2@ZJ5M/"2"<8%;#==5EQ3_?4:GT:LI-N,6>P3J$FWJ
- M#.SC!!?E:,2&AN`U9"^$[$-=^[8O/@_T"YW(?0[>5N2#\A!_T`^:+Q;^6O77
- MA.0#E*_W3,P/`"]V9)N%`MO(]=?P&S8?,.BH_\U]<73M-U!+`P04````"`!K
- M4C`=*-*(KEP```!\`0``#````%1%3$5#4D0Q+D524N7,,0J$,!`%T'[!._P3
- M"'$;L0MJYS8J6(=DU!1)EAF%'%_/8&O_>(OAZ..&N1_Z=NQ4J:<?JAH-M'-,
- M(J!LB9P@F.S#&<`F;H0U,8[="_Z<[,T2%Y_77E_UZ+H`4$L#!!0````(`&U2
- M,!TIRVCV9P```)`#```,````5$5,14-21#(N15)2Y<PQ"H,P%`;@O>`=_A,(
- M6BW23=ILNEC!.9A7FR&)O*>0X^L9BEOVCV_2[*U?,*I.O89WF;>?'F6#)UIC
- MF$1`<28R`J>C=;L#:[\0OH&Q_:Q@Y3"?+'!V2_:Z%Q=>50)7G<#U^.LZ`%!+
- M`P04````"`!K4C`=#LVE_>8!``"G!```#````%1%3$5#4D0Q+DA%6%U47<[=
- M*@Q\K]2]V,80\[T1".O?4L<&5[WW2(B<S(Q_QI`?$HH?D]ALOW_]D.$?UOBP
- M%_K&)M(EQ/6"C/>RZ;,2I$^P"CF(4.SJ3K3697MX*]R:4D@,<I4$L3;$5K%O
- M[(VHV07+40H4#`(#Y*$)>IX)13_A$5<UR]>KQ+/U2RP[0:P^KAI,1.`Y+U@I
- MRK<N<GQ0&NM)T((]H'[%Q#SODV&;*\US,GONCOJ9$G3E>RHU`U[%6BJ?_RGY
- MY6D]0>\5[/XBVNUWIGU>(0PWL[\F5!X)1DXNM1[5[,"W:B8QUL`^D)M]*$
- M?G,"L"KN?Z&1WKISW@K9];BR<CHT_&7#I*!"O=:W\RX8(LS2"^)-0H47_07#
- M0JBD1'Z8H&\Z-",GWX81%I7ODJ!7#$9?'@&A)XFF?<N]+=QAKV$WWWN&71:J
- MF0LQZ<L^_?3C946-!N._."J9\[.X,]:=]13/7WM.9=^<SQ(G+(#OSLNS?:;#
- M`5A0.=K:?$`^0</";1T#:#SWDV"</O$#/=P=5ZZ;D_DJW0"X(WXJNB;H??8P
- M?';W&'GKO64L_WAK0H]QT=T2]/LB!:T790""9[MGB/U^EE)4M2AFJJT5G=%G
- M`^A]/D=E(/"9B$:+*O]=[_EZZ'$=M8P8T?TP;?SY`U!+`P04````"`!M4C`=
- MW996=LP!``!A!```#````%1%3$5#4D0R+DA%6%5469(K,0C[GZJY"^"E\?QY
- M:9__2B-YR;R7*H=.A%ADZ!\Q61\5\YZ_OW[$\0NGOK!!WCI%HIMH/:#B?YOR
- M>EA.K^$$(8A02G81&>-X,[P'S3G*HCCHT2Z(,T'V!#MALTCV`X;--#`4#@I0
- M:[P@\XP@I<)V,!'>R@$CF04,Y$7"R"CO9<;=GR\3I<*QSGG`Q.JK-$/:PS9Y
- M+K@HRK!64)XW"'#!?/IT!\[&P'RO"/D?IC;M=$CA@`]S-LC*-LJ2T#\Y'QR6
- M>HI)WC1\1E#:KUFT_S,5B\TT?YF7.F`Y(1P`>!^7=K?@'/!-`EB1$R"BI
- M'Y!Z)[!0KY?)KG`K5_CJNR"=N/>@(S7[:Z5QS%`&PT,$%B;MMM).SA46U94N
- M,N_$=2HTJ#%"]Q6Z#+T@5>K($]1IX=CMAAV;V7ED!CZG>?L<+&3@J8>7\\,*
- M[(*<_L*O)["8Q)Q^]^-=-X-<KPR`[4D&J0\X%Q,2)*7&JZUR+WM2UZS3(QA9
- M.VT^3"X6U:E7G7T)%_0M`-0QC@BM'.%U40/"4?"3-Z>]DZI'V[.3N]-H_Y^V
- M-SCNSA&O[IV(MKU=F20$LY1BG$O@#)!*/#E[7#586'-R7BE<JU]02P,$%```
- M``@`:U(P'0-GLJ7L&```!'8```P```!414Q%0U)$,2Y,4U3%7>MWVS:R_YR<
- MS?\P[?;<[)YKNP1)\=&<?M#+J?;:EJXDUVF_]-`29?-6%EV2BI/^]9<`^``&
- M`"7GT:IG-XD(_#C`/#"8&4"7L_[B$BQR9MDPC[=QE,=K@.7X8CR<C\@9?0@0
- MGA+OE(2A"T"L'TCX@TT`?V;]M^/R\:N7D\44_(!XL/BX6]UGZ2[=YW`9/Z39
- M1QA&V1K_MM5*39JY>O7EY,AP#3P7_&PR4,IZ,Q@[J87(UA,;V>#\<E)>^6
- MKUX"_-R_N![3'J#[6)954F1^:#?_6$Z6%_0MWQY-YK<=N$[SCXO)8LFFX<?9
- M9$B\8>">P/S'G\;O.GJ[\&)R-;RX+H?];=EK/GY[-O[?ZZ[W$7@#'/_#![A,
- M5EFZ2G=%EFZW<0:3W6J[7\=PGFSC[KF@#RUR?JX;4`G?<X4OXS_V_.$'LMF4
- M?]8$E(WF<1X7\'.\*M*L`]-EF+UC,'L:3$>'V6.8GA;3D3$]#::OP_08IJ_%
- M]&5,7X-9?E1,G_;P16UI,7F'&K-L="1F0'L$>A[)F(&.1Y0A"F8(DZOES^.A
- M'M.5Z/R^A)WLBCC;/TK(6G$C%IB'0DCYVM%DWCF4R6Z=9.5;N%S/XSOHK]=9
- MG.?T[TE>TE&_`!NE\AL;YLNA,"KY!82]8!Y'6U@F#S$,M^GJ=QBF^YV`:JNH
- M#LR&%]*7(JK-9RM+[[+HH4&[2)]@\+&(:UA'A75AL>POKQ=Z6(?!+HJHV*M#
- M5UE*>G"^$&=6QU(VI8MX2Z<70XH*6T%Z,)O.EWT#9(^/.\T*Z,/D^ZF"**IK
- MA>@SQ($!T6L1!UI$45DKQ(`ABBP7$?T6<:A%#%3$$/JCX?3*TB,&L@[WOQ_!
- MD-MD)JM6#1PJP+95`L_'`KLEX%`+_#[.*+7S.-]O59ZIU-L$QN-17V2:B?K`
- M+9O.YM-+&$5%I&!K!F"7'<HA'#&`%MNDO*)45?!,S?K+G_3PD5;-?DKN[F&0
- M%'F-*\I6A>M28S><7NEQ;RNK4Z(Q"R=P\X!^V#U8SB>+H_5CQ.Q:DNZ.T!3;
- M8]A':XH96]49VV?81^N,&5LC?P'7'L$V/T-[2`=P"./Q<<"M\`G89RVX*MF.
- MQ<$%VW]8LB5PV[PH.02FL^7$)']\49H^JA.L76`=&\R<=1RXE&1&Q]G+-"].
- M%\G=+MDDJVA74/4QK]F."Q<=D!:#O(@C,Z9F1JCB7(]UF*2CEP>_2-93T\M2
- M>_EPWK]8B"]KZ._H%<#55/Y2[J7G3=BQ*7$MS7+^KXWE_+NU7_J.I,.E<FT8
- M]N?S7SK9,XRR[&,WFUT')+?I.!R52:X+(T20*NRCY*[$.`:M5Z*9J>I$4_TX
- MUX-??QM,E@8T[L?]&F?I`1@??NV8*CV,ZOZY`<Q^&TUO#&;!J:SP4YS!*'W:
- M'0`+838RTV0`^\<7C@;8?T$TP-(YOST+EK]-KTV<Y<[O352L[M?I'?/]3Z=[
- MR4AI,`DL32;@.$S58^C9,)]91LQ>M3^IC,,LNFN\=<OL*O2<$E1FB>HJ:$&)
- M>27IN3"9SPZL),U6K7+RDMT=7PWKEYR9K1H-$)@?>A2=.VVBK;P]9"OI=MYH
- MXWH!S`<3*1*@VKCY@+L^J_MH5PXB:?S"S3:Z,UNJ'MM1&[&YI2I;"([FN0"H
- M6AG/@OG23"RW,FRS.WT?9YMM^M1NTD5DU59XA$Z#=O5M;44]#</[LQ9WO(MN
- MM[%993R;#M&([,J3H"*J"N,Y=!:,B#W]+)PA7%5G/!?Z(S.NI[JIQ\'V8#P^
- M#K;U(V^RI(AU^*I6>AZ\E>$U6OEVF]Y&6^T<:W7&\SLTT0NH<\K=5T$3`W)(
- M$[VP0Q-]"V8+LQVL8EI9G*\B&NFD-M4RZYY/2C2S`20:-&)6/-\NT>2O==$>
- M$<TV*YOOE&CR7E>S,#=H_3Q/[G8/L>Q!JYKFNS"7%4VC:4POJ%,>;6&\;LV^
- M4=O\7ME'[V$C;:M0%^D^6V%<52U\C]F%T=LNM6CE5255U03?A_E@=MVM"=7^
- M>+;?;D_WCP<5P0\Z%,$/2\`J,"0N2<$A10BL#D4(2(DI[@QUBB"'@K@7MWA*
- MBM6]62<"FQJX`^M1"YS3S:=V_5`5)'!*Z+>2:Z0J"()>%%%V:%T*7!C^)%L%
- M557DN1C>1[M=O%6<)%5A@AX%E^9)59A.<&*6[\"CDB&1KLHWFA$>>\:$JX(>
- M^`S;E%+PC\36BV:7P`>-P!/)\A\4^-#J$/B0P&QX_M8T594/UK=.YWV'#FF3
- MW.VSB,5JP"H<V031-%CD+6#\CIF*;0+6&KR-3SIJG7-4T>S#OV<RCI4SD2
- M\SA:\UBNJ&B:F?+A1LX4Z-9+K9>BH*OF(0Q*]+'1I-D=Z)6![C8384CQYZ8H
- MM-.%GV5I)L$KAH)8-!1H-IQB:JR%5RVGCN6D*VE-+)O&A]*'&/9YO-EOX2%:
- M96E^=G;V%7;JSM^4MR=6ARX1FCJ^7K#X/QM\1\L>O'A(WS_1+.UR?#G[[::C
- MK0<O\J?HD;;E";>3KM8^0EYTM`W@1;Q;/W2TZ(@($F+!;#J#(X9+2#L$3E37
- M$(C=#J'*,)K;.@BY"]?%;3NIZ!V:'.)U34Z[%(ZO1IU5%1T/NX(,EB=J,DUT
- MS)*=Z(%?)'G1T;TKU&`%,)R/?AM>_(\F?LP_=(]MP7_#O._"CUSC^+IM!@T9
- MZ$A([FE`^U8-QXSU=%\\[CM"K,1BH//%4A-5;RDE-2@K,#BAZ>W3_JI(WG?L
- M5@EAT#?"/J6&]@5HOX9F1OJ4+P(G\%,BOD!?;&!WL)<X4EU$_[)=GEL>=ZS/
- MQ&WXBR/C+-M.AS81UFAQE5CQW/U#E!4K.K+)Z`1*8F\_%G&=J"2:S+,'Y]>+
- MX940QA1`"4]QG>^IY=_OJ&^QDBH7B)K7(CX,)DLC(L]K#9("`:FYV?+E%]/I
- M3$02@7AN]B)-'U$U!5'3L80F\GX[O^B_U4+Q=*RT;`L+-E%985O,&!G\/L)9
- ML8P?'M,LRC["HBC_O(OAG[4_3Y"?Q9/H%%+T;43(M0FRC@,0>6=>Y<XII.C.
- MB)"Q"=*I(=4")MMAD(;"(++!D,L*TJT@;0V5;KT(Z"!M3.4-+*+W<9/BKV`U
- ME/;JI50+JU+*UBP%6ZNF=L<B0C/=]2?-[JH7VI)M?0/#^^01)B-N+E^]O(FR
- M7;*[^Z%Y=?QA%<?K'!ZB#\G#_@$R%AC>I!D4]TD.CUFZ*IM1/^GOZ<K&PS*!
- M[?_Q3'S]63]5$^+:)\+_/F^P-O6U^<M0`4`'/[H2I(ZE9Y:PL+Q!&S=J#///
- M'H:OK(PL:8]G;_#:XA_R^G!Z7O_044:(2_O>\`7V]'U=9\<\`3N@=74H+5]_
- M[M(BI7].KJ349@GUG_W#(Y0/DUU2)-$V^9//6I;NBV37L:XZS&WZTGL.]^^J
- M%78\9=IQ]6,;?FQGWH3FPXO'?7ZO>_J&&ZVL<C1RSC^W[-7'QO:R^9NRCV%^
- MJS56]KYM%\UVAOFSY7NP]36\9\&[^&!;KK0`LMJ'^K.*MMMJNB[[DRM1#^F3
- MARC9\0P9W?L>%JL07CRFC]JG3.Z+-%,F+P!KK"PIZDP(NR+F*+,PY:&9:#9'
- MK![-&G<P2=DCL5*SDK1CN]2D#0%7(+'2D/J3Q<4FB1$FFY_RR3[;P29+']HY
- M_R]8;>,H:Y.3G14D^H>VQNQ:DKUY4\5OH\JZ4CM*;0IC^1D;5]F>>/*4LZ*2
- MVBC=YAOV926Q31;\#?17U!0W;(?;:/<[$`Y*>*H.5Y@TXKG-GM:%.J@W,&2S
- M\E1GYXOD(>;&E-C@6&/)]V9E)H)H;)^8L2>$T&B0];J"K))@&<UOYW%1)+L[
- M+J+$X8%\7&N"I0T7@;UA7AY-,0O8=?47VW\XUKDD7JSV1$LI_324+N*"%<5"
- M'Y99"1@5,5S0J8@K@GL\(([+411#@8H;!8(K^**&ERGW*.62SK(*%2/E1*%\
- M8*#<Y]%V7/RAHUS<>6#*!R;*`R`VEN)>R]K;U;.DV.*@(93`2#YZMBC%#!57
- MKM=2S+YG0'T*A/C6<Q0@7+1=`_'O&=*`(N%YE!2K09+GL44:<*0A.&B#S&L[
- M$*_9EEA"JK9X?#][S?:S]=XQR2$JX+NR#WO%B&<C<(4(9CJN31:8CFJ19VFR
- M:U@^UA@NX53(IQFN<R"N7,3*RD\P*,\;G#2A?JX!338!A?/97E<CG^'GR:=-
- MP`HPL9X%POQNGABQ<EWY&TYA-;<;;5R";7Q93@"7HNX<B'P#WTB*$Z&K'S
- M["/$K@G#%&E)Y^-'#D==M%`*>[#:$TPDCH$(1-:/&%Q/1YU[!'5\G:6.$*VE
- MJI2@1*?A*X;L\40IKCI19A,=!1%GLWS$H'QJ`Y!:>9YB`W1JQ9R!`JM5)4XX
- ML%75F%"IGOU2\R^@,H=?+BU!E<S1E[,>(=@TQZ<4F2!7==B?CR8CWJ5?I=]1
- MZ0F>+'PF29@L.N^/S%JLZ8!O/[;3-P"KCSDAG/Q*=EP754Y,=JN,[J78HT?!
- M%-E#"HDFQ;<52)4C#62'H;-'8`VPC/NMC*_CU2;_LY'QDS;Z.XHK]%K&][LB
- MV4)2O&YX/@8[D!G/:E3P%K61@0;[;0K1;@UW<0$YS7T]T(EG"OH-1S[7F&>_
- M]WGFV:%F%%L\WU/,:&6>FWQ@O?RIA5N-A78($*)`"\N)#-UD2E'(<Y3D5:T*
- M"RFH1M\7%I-/,?H.-:"AA4"U/IK%W.#&NZR2M%(9WY</%O2^>K"`Q5`L*Y`B
- MU)*]:.V#?'I(L`_5(W,1!>'VSNEIQ#BPH=Y5?YH8>T""`,F:\)+;8I.O1%D3
- M0I[QZG=(-IHX.W5`&+@/=N`@9U.P=[5*2W$!/CF_)X\*=D*]NX?';4PM*<,/
- M-#HH.+=F'>1'7#ELA<EB@8T*AAH5%)S=3U'!OD8%`U6KGZ>"`R!#.4'"2W($
- M]N6,3I8M.:F/X=3LH[MP79ZD1![J>!<>P;O)!G9I`2S%]W\T>G@;E6^B%OHI
- M2D03S5XS`HN$:`""36D]"#G=HS6C+?%CC?,42@ZCP7GBFX@D9_Y3O*;Z25>2
- M9B/AG&LV$H)+\?R-Q%!P=%T+K$#.ZO'2(>32J([NV[@PNL\ND86BKCE2:<;.
- MN4`S>\30;(T9"C]S-74=(#VL;Z&@;_)FQZ1O374F"_$0!QOF4%4W;GU/FI+H
- M-XW24F>P#I+QT(%+?7)A8UK7*BEB);>AY^6BNV0%5_N'VW+<_R2JWC%X3R=;
- MTGI:\4D^9BCQB3UB:'Y);%_VU8B0M6J(C:).8FT#L8%*+!$R(,\D-@3B(A$E
- M0F&8PO\V!/`A7NV+6$-@'XB/!(`(\?`:4A6`2HID_D=W4;+C_J0[4"TY$<K`
- M/LF2NQI[2X3Z:K.]K8\SLTCZ-DT?O^FL8^)O&]%E'T^.WP3IZV6_FISF6(JX
- M;B#OK02E'KP0E*KKF]0D$WN)+2T9[7)1-FI:,-AS<.18<E44I;B9UE%N)HOV
- M*4X;$=[P'*>-Q?8L=-J855L)X7@:=.\JM>(XN`ZRJJV2)J.G<>1I4=5GR5[/
- MH:$F)'M$->DL^'?2U@_Q4)-8(L2.TC-(EPJ8'!UDQ5K(KV11P).V>DCP*S/F
- MHR4YT!,Y#+,'=B`$:'"-5RU?5U.I%*EQ24X@IVXEQ\WC/_;Q;L5M1<^CH00Y
- MO$J$=;A>=]7P*EUWV;<_1]M]!48#S*$<NB9"88V80Y/3MHUT\4<,+%`#O\2V
- MGA_X[87JVD6$K9-Y[5KL;XLL6A7P7?F(I8X$\OI@V7)=28G:LBC?W[9C/;%T
- MJ$])<<^@:3"M,2Z<2>P5`R`CRZ&LM]I7"'9\]R>T7+=51_3/.$M;TU()!T,>
- M42\1R9.M";$AQ:1>(G.UTET,]U$.WY4MVA@C@QZK$4MB:V)LAHCE9K_=PGLF
- M4@B81H61PT]LG:.$'7X>%=9YRYX%1#&'MM_,*'*5Q,6`R9AD7UM4G5D4XCN5
- M6=0DWBZ3G!U!Z*]6=&N6Y/?Q^J1N7Z20Q[MUQ_4&A%>(L%BNJM6.U=B'9VFU
- MY\C.&`=3_1U<*T?+31X_0E)0RJN'#(^%B^4M"G'4C02N2Y/P^,,O'SGQ_H+(
- MB4<SB*%<-T"$ZA9Q`D0%5":`+XP>31@*&0<.IU%FN0TK.8S6<%/9(8^OB)Y/
- M[1KF3D]KUXC>KE&HQEKR78X7``F9*6LL>HDJ*"^W9#"<CT=B'0XS90E;"^,_
- M]M&6CKRAM`\D4##%?8X),\W@+HNC(LY.H+B/=WQU+*'Y#C(JG_$W#,$:*HP2
- M%)FO0!I&S5.6'N4/J+',B_@1LN3NGIMV;Z1##K\$\EB#+)9(?#HR]48MM.*Y
- MFG5T(S91Y&S#P'P+K)Y"9DM0M%NW.G!"!+#^;EW1R/!NY!RT3V@<`>.J<01U
- M^"*1K7+Y-CAC%$\A0A%%M%X;XBG]=3OF*H3B.VK^B<CE$YWYIS7U-^LR$B$9
- MY;O4W%L(5\KQLD&KJ1IJ[BDJB_3H4S4^LU9R)061*RD:3HG>>>/4%;5?YW`\
- M:J[D>O<23Q-*0"7Q2(S*QPS-IW*$^1-JY8AHY8@@P,92^:,&4"B2J"T574JG
- MV%)E_**Q)*]<+V97\OMD4[#M*7]!'ZP1GL\>@1*-9H@@V[8*BN:3`?'O&_W<
- MQANNGOZ`9JC03`@[JSI#I<X$RU"Q,QM\/GB"BHZ``]/]N8_"*4+A1+WYJ`=@
- M<$.S^#&.BB;[!4F5H_)'0,Z5^7";":X#N6S<)^T%3<)^B7Z9;JJ9H1',RH'V
- MQT#02>T26HV2J[L[[M[)1T!*O'.-NRC44GR:NQA8&G=1J*'X>NYB+^#N8D"`
- MG.,M:R]L5LZ:!>V6E9]*$5C0'D&I8P])WNZ)`YNNTLB%%-P18?]Z,Y>4JG]+
- M3Z$_,>#T,:XJEQ,F6/QP'TO:D"$F7RB24,E7=MSMX1R9;E='M_VEZ.Z!U<=;
- M):%NHDF"*UNE)F---V/T<+X:^@X\S79)J*(X?KMTVDJJKY%_H7[B$^4_T,B_
- M4$KQ]>2?W]W!@KFJ!^T%#5N?YT$'-#*`]TM"K47M0?,M46N)=1ZTL&T*!FJ&
- MA,CU&(8,B4BDL*$.AAHZA1J,(^BLT!121T"&;`T-V\"%4(IQN^/>4ME]++IJ
- M:`W=Q7<1/<)VPL2;?L/S/.P5YQK3+M1C/->TA[I(@.\V)'Z::(>Z2(!0?_'U
- M1-OWX`4GP0;+#U"HQ_?K2A_J3C(NXSMZWW";6)WL^>8;OEB'#C@N#LH)U10E
- M@5Q3/M!%A?5PRQ[HF`L12B6$'BYWN<->V0-[LT)A@=##XAH7>F4/(>[,>TAQ
- MZ+H'J:CRRQY"M([WL'4][(JJH.PA;-)Y#T?7P^&.;AC2D2-O7_#^Q9'SF&+8
- M+WO@2*60U1=ZE*V^?/##_PN"'^&@'*-@W?D8)6M?C[%LQ7H,RQY"$1#O(?E'
- M=0^?^_#A2"</6BFMY6%,Y1KS2BNE@6O6NM#J.),M9.&[SF23T/X:YX>"9_)V
- M\<OE8'H!R_[@@G'NHC\8RQ8"?1H>X_N?M<>_`Z@:JO1J&RXZ`?EY=-ZP$Y`?
- MM:8-Y2MX#'?_TX;HQC#SJ^5K+PR_2$`;RC<6:1M:K*%\W;6V85@VQ(%7[7EL
- MVA`?_S6^NEX<NAJ&-F\HW9YJ1D1W$QE^(((U[.8@O[6@;(AN"#"_&IWZ[VQX
- M:-36L&HHY=E,O,8'^(WRB&.4AFJX5R_QA:[&5^-[9(T-<;V.4<SP!=)&=<6%
- M#YV(8D&K]M`K1Y3K<SI>?:2ZXEMJC&*&RZ^TRD5/<^![DHUBAJ-[QE=C3U[[
- MZH`WE/QHP[U2KU[BZP^-\H@CA<;!X&.SAE^UH`WEB@(MXH`W/,Q"MVHH7HIG
- MY#6^6M2H"OB@IO;`WZAMV"'CK%Z!-91.RIH',Y_!49S!ARBT$T[KU?"]XT86
- M'AAR?::Y;'@,(J417_YM?#4.HFJO#AS!E_:%PL_PA>"475V?[/;Q^GE^$2[.
- MT-[[:4/=L,N`LLPU:RB%G0P7T;UZB0]/&C4`WRYGY!R^+*X#L7-V6D\+_WJ%
- MMB$5;'Q5M]&5P#_.I'.VS\^KAG+M1T=#:>NB-G2:ABA_@1OZ=4/I!X_,$XZN
- M.C`W1.<7#3<[\8;="EW93_P3,4:]Q[?2FFD\Y.,UTH/NDC5+#[HFUBP4Z-9X
- M8T-\RW-7P\/+B\4:RE>N&N<17UYH1D0I%ZW]I#J#[TTW"@6^"]TH%+ATQ,A"
- M?-.N<0G$5U6;:40W>QN%`E_':T3$OR1EY#6N2=&NOL.J8;?HLJ.YO"&^:T%I
- M.*X:'C(`Y+QJ*%X6I/6JFX8W!QJR5Q^SGE,6XC/OQ@G'1\R-8H9_:L>H,_@G
- M48SRB'_JP#@8?,NG$1%?V&F41WSSIE',\"^U&%[]A?TB8OTM?M&O<,0\T^G#
- M/S]B;$C_NQQ?3N>_P/6"CNRR/X-_O7[W&GZ$ZYP&TN'U*?L'JV;\-X],6A;\
- M`.].3T_?U9_R[_`.?0Y_\8H?9_GA$[IJL*H,\6&T4SA%'^4+BC6D6`=;'H-5
- MW9W%*:/3]EEH-I^SYW?54M;?;B$M[N,,'KCLWM++(7/8,X:?<1%A%]K2Q/`/
- M3'::B[!R_D7OU<O+.,^CNSAO6KQZ^8__!U!+`P04````"`!M4C`=SK(OU808
- M``"#=0``#````%1%3$5#4D0R+DQ35-5=ZW/;-K;_G,SF?SCM=F[:N;9+\*UX
- M^D$OI]IK6[J2W*3]TJ$ERN96%EV2BI/^]9<`^``.`,J.D^U<[6R2BN`/!\!Y
- MX9P#Z&+67UR`14XL&^;Q-H[R>`VP')^/A_.1?4(?`O2.B7],>CT7@%AO2.^-
- M[0'^S/IOQ^7C5R\GBRD$(?%A\6FWNLW27;K/X2*^2[-/,(RR-8SO]MNH2+-7
- M+U^]/)\.`::#?XV'2QA.1V,&=3ZY',-B>C4?CDM*WB]?O03XI7]^-:9O@.YC
- M618!,#^TF_]83I;GM)=O'TWFMQVX3O,?YY/%DDW#3[/)D/C#T#V"^4\_C]]W
- MO.W"B\GE\/RJ'/:WY5OS\=N3\?]>=?5'X!0X_L>/<)&LLG25[HHLW6[C#":[
- MU7:_CN$LV<;=<T$?6N3L3#>@$MYSA2_C/_?\X4>RV91_UP24C>9Q'A?P2[PJ
- MTJP#TV68(L<8,3T-IJ/#]!BFK\5T9$Q?@QGH,'V&&6@Q`QDST&"6'Q4SH&\$
- M1(O)7Z@QRT:/Q`SI&Z%^C63,4+=&=$$4S!Y,+I>_C(=Z3%>B\\<2=K(KXFQ_
- M+R%KV8U88!X*(66WH\F\<RB3W3K)REXX7\_C&^BOUUF<Y_3?25[247<@3G/5
- M@0WSY5`8E=P!81W,XV@+R^0NAN$V7?T!PW2_$U!M%=6!V?!<^E)$M?EL9>E-
- M%MTU:.?I`PP^%7$-ZZBP+BR6_>750@_K,-A%$15[=>CJDA(/SA;BS.J6E$WI
- M(M[2Z<606,67D#[,IO-EWP#I\7&G60%]F/PX51!%<:T0`X8X,"#Z+>)`BR@*
- M:X48,D1QR47$H$4<:A%#%;$'_=%P>FGI$4-9AOL_CF#(=3+C5:L&[BG`ME4"
- MS\?"<DO`/2WPASBCU,[C?+]5UTREWB8P'H_ZXJ*9J`_=LNEL/KV`451$"K9F
- M`';Y0CF$1PR@Q38)K\A5%3P3L_[R9SU\I!6SGY.;6Q@D15[CBKQ5X;I4V0VG
- MEWK<ZTKKE&A,PPFK>4`^;`^6\\GBT?(Q8GHM27>/D!3;9]B/EA0SMBHS=L"P
- M'RTS9FP-_X5<>@3=_`3I(1W`/1B/'P?<,I^`?=*"JYSM6!Q<T/V'.5L"M\U&
- MR2$PG2TG)O[C1FEZKTZPUL`Z-IA7UG'@0N(9W<I>I'EQO$AN=LDF646[@HJ/
- MV68[+IQW0%H,\CR.S)B:&:&"<S7689*.MWSX5=*>FK<L]:T`SOKG"[&SAOZ.
- MMT*XG,I?RF_IUZ;7L2EQ+8TY_WYC.3^T^DO_(NEPJ5P;AOWY_-?.Y1E&6?:I
- M>YE=!R2WZ7$XZB*Y+HP002JSCY*;$N,Q:%Z)9J:J$TWUXUP??OM],%D:T+@?
- M]UN<I0=@`OBM8ZKT,*K[YX8P^WTT?6=0"TZEA1_B#$;IP^X`6`]F(S--!K!_
- M?.%H@/T?B`98.N?7LV#Y^_3*M++<^7T7%:O;=7K#?/_CZ5Y24AI,`DN3"G@<
- MINHQ>#;,9Y81TZOV)Y5RF$4WC;=NF5T%SRE!9=E1704M*#%;$L^%R7QVP)(T
- M6[7*R4MV-]P:UIV<F+4:#1"8'_H4G3MMHJZ\/J0KZ7;>J..\$.:#B10)4'7<
- M?,!=G]5MM"L'D31^X68;W9@UE<=VU$9LKJG*%H*C>28`JEK&MV"^-!/+M0S;
- M[$X_Q-EFFSZTFW016=45/J'3H+6^K:ZHIV%X>]+BCG?1]38VBXQOTR$:D5UY
- M$E1$56!\A\Z"$='3S\()PE5EQG>A/S+C^JJ;^CA8#\;CQ\&V?N2[+"EB';XJ
- ME;X/;V5XC52^W:;7T58[QUJ9\8,.2?1#ZIQR]U60Q)`<DD2_UR&)@06SA5D/
- M5C&M+,Y7$8UT4IUJF64O("6:60$2#1HQ"UY@EVCRU[IHCXAFFX4M<$HT>:^K
- M,<P-6C_/DYO=72Q[T*JD!2[,94'32!J3"^J41UL8KUNU;Y2VP"O?T7O82-HJ
- MU$6ZSU885Q6+P&=Z8?2V2RQ:?E5)524A"&`^F%UU2T*U/Y[MM]OC_?U!00C"
- M#D$(>B5@%1@235)X2!!"JT,00E)BBCM#G2#(H2#NQ2T>DF)U:Y:)T*8*[H`]
- M:H%SNOG4V@]50$*GA'XKN4:J@"#H11%EA^Q2Z,+P9UDKJ*(BS\7P-MKMXJWB
- M)*D"$WH47)HG56`ZP8F9OT.?<H9$NLK?:$9X[!D3KC)Z!L4THA>"2VGC6[
- MYL&)Y(FO\@P_>L#H;O$9@-S]Z:IJKRP?K6\;SOT"%MDIM]%K'8R`$KT+,9
- MLFFBR*.0]0-R.J:IYY:P563J:=/D=4V3#_.._1Q*^E2.Q#R.UCR6*PJ:9J8"
- M>"=G"G3V4NNE*.BJ>NB%)?K8J-+L#O1*07>KB5Z/XL]-46BG"S_+TDR"5Q0%
- ML6@HT*PXQ=18"Z]J3MV2DZZD-;%L&A]*[V+8Y_%FOX6[:)6E^<G)R5?8J3M_
- M4]Z>6!VR1&CJ^&K!XO]L\!TM/7AQEWYXH%G:Y?AB]ON[CK8^O,@?HGO:EB?<
- MCKI:!PAYT=$VA!?Q;GW7T:(C(DB(!;/I#!XQ7$+:(7"BNH9`['8(58;1W-9!
- MR%VX+F[;285W:'*(WS4YK2D<7XXZJRHZ'G8%&2Q?E&2:Z)@E.]$#/T_RHN/U
- MKE"#%<)P/OI]>/X_FO@Q_]`]M@7_#?.^"S]QB>-VVPS:8Z`C(;FG`>U;-1Q3
- MUM-]<;_O"+$2BX'.%TM-5+VEE-2@K,#@B*:WC_NK(OG0L5LEA$&_$_8I-70@
- M0`<U-%/2Q]P(','/B=B!OMC`[EA>XDAU$?V+UCRW:]QAGXG;K"^.C+-L.QW:
- M1+#1HI58\=S]7905*SJRR>@(2F*O/Q5QG:@DFLRS#V=7B^&E$,840`E/<9WM
- MJ>;?[ZAOL9(J%XB:UR(!#"9+(R+/:PV2`@&IN=FR\_/I="8BB4`\-WN>IO>H
- MFH*HZ5A"$WF_GYWWWVJA>#I6,MN"P2;J4M@64T8&OX_PI5C&=_=I%F6?8%&4
- M?]_$\,_:GR?(S^))=`HI^C8BY-H$6<<!B+PSKW+G%%)T9T3(V`3IU)!J`9/M
- M,$A#81#9F"#="M+64.G61D`':6,JW\$B^A`W*?X*5D.I5YM2+:Q"*;=9"K96
- M3.T.(T(SW?4GS6ZJ#FU)MY["\#:YA\F(J\M7+]]%V2[9W;QINHX_KN)XG<-=
- M]#&YV]]!Q@+#FS2#XC;)X3Y+5V4SZB?]/:^R\;!,8/L'S\37G_5#-2&N?23\
- M_WF#M:FOS3M#!0`=Z]&5('4L_6()AN44;=RH,LR?/8Q`L8PL:8]G;_#:XA_R
- M^G!Z7O_0T8V0R.S(]A(TN,;XL5*$E5_^_9!;$_;LFQ_^-F[]TML1]ZMO1Y[#
- M(72!0L)$BQ"P;;J,K#"BX9!KJ)592([*/ZE\T6TZ_9.P;VSVC>-T,`?S-_[_
- M:1^ZI7-=SP/?#P(@A%:JLA(/S>RX+IT%SZ-_^C[],PC:.0K=CMGQGCD[-MT'
- M6K;L5K.B$@V=4ECC%,[*OFXY%W+WZXJY7\S5Z2"Y*Z_BA(HJP%6^I]S7/OY0
- ME]RR38$=TA);7'52?6[2(J5_3RZE*H<2ZE_[NWLH'R8EY4FT3?[B"C1+]T6R
- MZW"Q7:NKI(4H@\!EQ6U<OQV'"<V&%_?[_%;W])1[`UGEP>=\-MSRK3[V8BZ:
- M?RD!`K8AM,9*4*E]11,G8!O%LA_LUACZ6?!7`K!IA0>NL:D_JVB[K:;KHC^Y
- M%`T<?7(7)3N>>J9!I<.+Y,*+^_1>^Y1Q49%FRN2%8(T57TV="2'<P':@+/Y_
- M:"::J`,K]+3&'8ND!!]8#6=)VF-?J4D;`B[M8_5#]2>+BTT2(TPV/^63?;:#
- M39;>M7/^7[#:QE'69OWU$]_E?+HZY].2I/>T2HQ$E3JCBHM**%OR$S:NLCWQ
- MY2EGM4.UB%_G&_9EQ;%-><DI]%=4]S7+#M?1[@\@')3P'#BN(6K8<YL]K`MU
- M4*<P9+/R4)>]%,E=S%43L<&QQHCC/4MDC>T#\Z(((33,:KVN(*OL<D8+1_*X
- M*)+=#6=1XO`,&2[+P=R&JRM/V5Z'UFX(V'59)=O8.]:9Q%ZL,D=+*?TTE"[B
- M@E6;0Q^660D8%3&<TZF(*X(]GFG"Y3F*HD!5PP+!%7Q1P\N4^Y1R2699I8Z1
- M<J)0/C!0'O`TEE*BHZ%<W-)CR@<FRD,@-N9BX3S/]>I)7&QQT!Z4P)@_`I&+
- M&2H^$E)S,?N>`?4I$%ZW4`'"IR%J(/X]0QI0)#R/DF`U2/(\MD@#CC0$Q[*D
- MV`0K"L)K;:W%)A2).%6@J4AAE=Y_XG`CFCJ1`CNL$@@O,([R"`M</V)P8TJ=
- M-*NL_$>A;H6IXPJ/6B1:+185\%W9ID2G`3J&?,93P;@,"!.*#[L(A-)'%,JV
- MZ&(@DR!HO7HQ\*&&1BL7^!`#YSL;1U&;TI_A=$8+7ZM&JM[V!8[_'+UMVT!<
- MN3B>U^\@4)Z//&I2B%P!-%E*E"9DH215//WP>>)INV"%"K$]<24W#XQ8^;S*
- M*:<PW<6,CR'=2.=4&+17%5:@HB+,)/BTF<`DE-_N4VKOUW2AKS]5;/.EM[;>
- M5]_:LAB8U<<R(YQ"3'9\_529F>Q6&1TA>\2G@RML.Z"02'8"6X%49:>!1+(S
- M$]%#L`98&P4M_ZWCU2;_J]%&1VTF8A17Z+4VVN^*9`M)\;J1SA[8H2RBK%X*
- M[Y$::6VPWZ80[=9P$Q>0TSSL'645IDJ_X<A]C4@'WC-%>@#$QE(2J):Q$NDF
- M-UU;#+6(L)7J(1"B0`O:0H9NLO8H_#Y*\JINJH0<:11%\%Q%08U)ST*@DJ*H
- MW1J+>8Z-0U85#$@EI0R1&1$I]R#IBU8_R.?"!/U0/3*7QQ"NYQV=?Q[:4&_K
- M/HLI'`(D#-'*"9U<%YM\):Z<$,R.5W]`LM%D4*@)8.`VV*$0;*V+K["`2!M3
- M/CE_)/<*=D(#(7?WVYAJ4H;O:#A:\*[,',T/+W/8"I-%>6N&=EP-0PO>UF<P
- MM.-II49>1)#.WX0(9RZHL76PG+ES,Z61[LJ#Y@52\?W0;J,F`LIJ19.S4`
- MI*[=9`.[M`"6O/TW#09=1V5/5-\]1(FH\%@W(5BDAP8@2&CK.<F)/*U2:HGO
- M:9S&GN2#&IQ&'F]+<N8WQFLJG\PUH+XC0^[+TU`7A&%YUWEZE;PC:]6F,4OT
- M`5BAG*_E16'(D<')VU-X&Q>PT29L2]2AS!1U-9E*,W:/!)K9(X8VTJBAWC-M
- MDS,&XF%YZZD^[`%Y:^IN2\0S(`Y6S#U5W+CV/6J*W4\;H:7AL3I*P_>NK@6.
- MN%>MJ]`4MI+;T).0T4VR@LO]W74Y[G\25>X8/-'QEF2=JG62#Y!*Z\0>,30:
- M)NG+GH^8`&J(C:).8FT#L8Y*+!%R6T\DU@7B(A8E0FQ<6?\&;?PQ7NV+6$.@
- M!R1`#$"$@&P-J3)`Q47R^D<W4;+CWIGKJYJ<"`5^GZ7)78V^)4+EO%G?U@?5
- M62AWFZ;WWW16J/'>0FKV\>0$392X-OO5Y#0'CD2[H?A"+O6'73F0(!K1-F?`
- M.K$ED]&:B[)1TX+!]L&1@YE5N9OBM%F/=-K<@>JT$:&'ISAM)=I0.4?.ZNB$
- M>#"-^G85T7$<7!Y25<W)DZ%QBVFYW/-X;TPW^[)>HU5U6%18].FHK0SCFWVQ
- M^(M=DL`@SRB#R>$I5H:'_$H6ACIJZ\($OS)C/EJ2`SUK13$]FI/R$'\)U7LU
- M?UU.I2*SQB4Y@IRZE1PWC__<Q[L5UQ4>H0$$>2='!#M<VUTUOD?M+OOVEVB[
- MK\!H^K8GQTZ)4#(E)G'D+%S#7?P1`W/4R".QK:=''CU7M5U$V+R:;==B?UUD
- MT:J`[\I'+'<AD.>!9<L50R5JJ[?S_74[UB-+0*4APT:5L-(UMBXGO`J9A6S)
- MR'+HB@]:9$%][_Z"=K%MU?_\*\[25J-4//'EHR[^?R#JXH74G97+7XBM1N-Q
- MC3QU9YE/2"-<MU$.WY4M:-B2NX\,NB>[,!Q:#<>K'B=GULU^NX4/C/<1<!^(
- MBW8FQ-9Y='AGP@.(.K?>&P!1]+8=-#R`?#K1:C%AD`Q!BZK3WT)-4Z6_-2FJ
- MBR1GIV#ZJQ7=0R;Y;;P^JML7*>3Q;MUQPP;A14HE!2.-^G&L1I$]3?V,9:^1
- M@ZF.&2[7I!5/]Y\@*2CEU4.&1R,</7DO11QUQX-+(R4\_I#"^1:%0TI<*%<2
- MX>3:"`3'[:%/P!&3%1Q.(QIR&U9#&JWA'3PDQ2U\YW-#Z-M4G>&Q>EIU1B1U
- MUBK)$JI1DM60'2`]ILJ"88LJB`+79#"<CT=B-05390DS@?&?^VA+1]Y0Z@$)
- M%4QQ>V/"3#.XR>*HB+,C*&[C'3>*)33?.$;E,]Y#`-9062A!++CAT2S4/&5I
- M.?Z`JIZ\B.\A2VYNN?OEASKDWI=`[FF0:6')\Y&I$VHA0R=4I31\MA&;*'RV
- MX6`#L#R%S):@:+=N9>"("]W;JBD>&]DW.?_I"S"N&CY0AR\2*0C7")PQ
- M"J,0MQ6N:+TVA%'ZZW;,5>3$'ZOI-B*431Q*MZVIFUF7+PBY-_^,*D\+X?K*
- MH-4,#56>%)4%>'09&I;IL:R>G,$G0KF%J*U$I[SQY8K:G7,X'E57\@&&$D\3
- M04!G'!`;E8\9FDWY"*]/3\M'1,M'!`&VFBIL`#U+T534,$VQILKXS7%)7KE>
- M3*_DM\FF8+M2WH$'U@C/IT>@1*-I%LBVK8"B^61`_/M&/K?QAHMGX-,T#YH)
- MH=*B3O.H,\'2/.P0#I\/GN6A(^#`=%LN9%XXL*/L.>H!&-S0++Z/HZ))(4%2
- M)7J"$,B9,A]N,\%U_):-^ZB]<4O8)M$OTTTU,S1P607?@QX0=/2^A%:#X^JF
- MCCM+\IF>$J^O<;XTA15/<[Z"@<;Y$BHKOI[SY87<^0J&0,[P3M7K-9:S7H)V
- MI\J/&0E+T)XIJD,.2=YNA8,1V"%6?(([(FQ;W\TEH>I?TVL%'AAP>A]7I>@)
- M8ZQZGQ2,@0PQ^4*YA4J^LM%N3UO)=)_IZ+:_$-VA!58?;SR$ZHLFDZQL/)JT
- M+]W:T-L6U(AW2#2;#Z$>X_&;C^.&4T-;P_^^*D]/X__0T?"_4+SQ]?B?7\;"
- M3++J0?MALZQ/\Z!#&A#`NP^A%*/VH/D&H]7$.@]:V(2$OIH8(7(9AB$Q(A(I
- M;$_#0$.G4,CP"#HK-(74$,B0V="P#5P(]0S7.^XME:^/15<-V=!=?!/1,XE'
- MC+WI-SR]P[KH:U2[4-3P5-4>ZO;5@=N0^)FLK=M7"Z;TZ[%VX,.+KQ#J"?ZN
- MH^Q")477"67"KY7YTL,.GSCLQ:\7@^DY+/N#<S:H\_Y@+-]IC3[-\/%MR-K#
- MT"%4#=7:.&W#12<@/YW-&W8"\H/'M*%\(8WA)GS:$-V?9>Y:O@3"<#\_;2C?
- MWZ-M:+&&\N7/VH:]LB&.`6E/)].&^#"LL6M\1:BY(;J`Q_`K"*QA]\+PH_EE
- M0W0,WMPU.MK>V5`\>*UM.*P:2BD'TQ+B4^I&-L-Q&^U%4;1K?&NIL6M\6:JQ
- M(2Y=,'(/OB79*(4X!]R)*%;*:4]V<AKE4H6.KA\IA?@J%B.;X4H4K<S0RFI\
- M&;"1S7#$P]@U]FZT78>\H>1;:,O**(WXCC\C/^+HB7$P^$"8X:<;:$,YN:I%
- M'/"&AY?0K1J*-[\9UQK?GVD4!7QH2GOX)FP;=O`X2]VRAM*I-?-@YC-XU,K@
- M.GKMA-/2'7RYMG$)#PRY/D)=-GP,(J41WW!M[!H'E@R7Y_&&G0H76%KE2_M"
- MO6?X0G#,+G)/=OMX_32_".<XM8,=\%F1MN):N:?<A0\R&24`7Z%F7#E\(UH'
- M8N>@6P<*_T2#MB%E;'P?M=&5P+]`I/.AS\ZJABH+&!I*L1>UH=,TQ/?6H(9!
- MW5#Z51_SA*-#O.:&Z"R1X?HBWK!;H"O]B7\'Q2CW^.I5,XV'?+R&>]"%J6;N
- M07>AFID"78UN;(BO,NYJ>-B\6*RA?*^H<1[Q#7UF1!2&UNI/NM;X<G`C4^`+
- MOXU,@9/3QB7$U\D:32"^C]E,([J^VL@4^,Y9(R+^N23C6N.LM];Z#JN&W:S+
- MCL[QAOC<L])P7#4\I`#(6=50O!%'ZU4W#84;>;0-6=>/L>=T"?'Y4^.$X^.>
- M1C;#OR=CE!G\NQ]&?L3W^1L'@Z^R-"+B6RF-_(BOES2R&?XY$F/7O\&A#^OZ
- M"_M%Q/I;_"+\&QO&>:;_NQA?3.>_PM6"$GS1G\'WK]^_AI_@*J?!17A]S/Z#
- MU4O]P,NN+`O>P/OCX^/W]:?\-[Q'G\-?5*7C;S[C50U6E3Q!:)2R8_0Y_`7%
- M&E*LI[^JP:HNB.*4T6E[%IK-Y^SIK^HI(Y8P9\]#L\F7I*R_W4):W,89W'%A
- MN:9W,^:P9ZQXPIF7W2=+TWAO&%<W]]/D[`MBOWIY$>=Y=!/G38M7+__Q?U!+
- M`P04````"``SH"T=Z\G1\\0```"U`0``#````%1%3$5#05)$+DY%5'V0,:O"
- M,!1&]T#^0T8=`KUIDG;5H%!L;:%]4!"18`<'!:E._GIS;WC0E^$1T@SGW"_Y
- M>N+,0=@.5&8Y4TH\]YS%=>8,L?H7_X3IOJVAY*RK'%A7ZD0(\U7?%B6$@/[A
- MY_?5SY/H_/3Z*XXAJ:EK'0XMFMM'C'+P]X6SXNRX&RY9E@'&2HVW2X,-Y`8?
- MBM_UTE/D*?*@2&!.T$08LW2B:%)L5/($&H(%P:BDAB6C));>'N?`8&]YH`[;
- M1(F#^-O&WX)1^0)02P,$%`````@`ET`N'45;^#19!0``/@T```P```!414Q%
- M0T%21"Y00T)]EDUL$T<4Q\=Q`B8RWIDE+16BE=M#A%8">9?%F`]5@7RHII!8
- M2<I'9;5RXMDUK1L[MBL$JBH5H0KU8%7@0\FA5"B'7%I5:EI%%6DIAU4/'#CE
- M@M43H`I!#S2TE@A6YZWC]1L;:FED^?=_[\V;F3?C=_8L.44V]QZ83,W8N9V)
- MP</AX?3'TZG2Z=Q,*AL^;NS2]?`$+YSFQ7`\OKGW^/#X1'QL-*R'S?#ATS.I
- MPMG-O=O("S\^/_F?CR](M.#]Z5+?NR7X]AO$3]XQB$(F/DH52M.I0CJ<2*6+
- MQ$=(@,0GQO;&]"CY@?X[6U<NYX-;/BUV$>+7P$DGFT@B/JA'!V,FF&\@$V-'
- M]1BYSE;Y,GV2?J;>M03V[Q3&)W42)&;X6.9<^.3.R52V87_LZ%%3)QFZRJM*
- M@3^@J[9(W;]#V`_J0C:,<'X$+#>2P4'=B$2)H:SR[T/O\PW4MKJ;IL8+3!WK
- M^Y!N;:#[[!Y"NOM`[?J&5'N(S_=/*)!W=Z/[)=)%3-(U27X76^.;8JE98;7.
- M=WN\3C$W/#XG<=WC48GO0?%_+;1X%,7'?"^*CWD,Q6_RE\4.Z!'2M8TD0+BA
- M7K<(K-1UV(?X`&]PUT'WA++GX`J&)R2E2#'DT(RTGJIG+\VPVQ,T>0;3$VI,
- M$O9X@B,+44^HR$)K\BE9:&4;87@549047L4>E!/F)DH)\]TH(\P-E!#F.LH'
- M\T.D:X:,`,_0WT2>_G7^-N*KO,6%_0`9``X70<!U?MCC2R_DCHC?\YPXZWR3
- M(B[H064T7Q7#O1HN&5&&!!E"9(>R7Y#]$HD($I%(OR#]B$#A3[%$$9-$L2:1
- M&@O/R@2N19V>E\CYHJ9BHJGA69G`I9FCBQ)9+"953)+"2R9PI:+TOD3N%\LJ
- M)F7AU4YNYH#BR-_EDA+1U/F<)I$:F\_!:O%N:+.-QP>3K!AX%4Z^\>"T2"4/
- M%).I/%"9K(C1(K<Z2%DM9<IJ,HMSOIC1U#<1J;&+F1K#1%//V9KZDXUM;ELU
- M]A4B4*>-&FN27\2O(Q2316'SGEOG35)AHU:%?8ULZA3(*")?TNL6T!9QQ/^.
- MPQ80^80"P9$U];8%>>/S&K>3:AF1-35KK:D:(O!::&H$14ZJ1WA2K:/(:T('
- M3^P%1/8:M]?$P%Y:&RFK%^S8E@M2AG4>VX+G@E_M-A]DDNI;TGF5[1J[E,'Y
- M7!/G]3,BL.ZD.'MY]K)$H%H<AJO%8==L1XKLL+E<N\VEC,-,E,\4NR`J_#&J
- MWJKRN(/`N]%.*@R_)!6V_\,*NX$B5]@?-E"\]EN\)E7"`PKD%MK#![2:!BH3
- MAU73>!5`CDB5.<`K;$XB<Z(V,#&4Q73C?6[%*=NP:]+MMH%BXEA`<>1K8EU_
- M(M+/3+LBQ3$4TP:*B6,!Q;NQF*ZQ:%N&0'&&9A9.$<]^(ROO?(UI67BY<$69
- M64V\=[BBS&Q2(O"NP"O9(I'@9&FF;[+4(C-]#Z=E$@D^G`8[F8"=2P*OB>9T
- MU_CPR-#P!#E(2##030\6ZTJT>)ZZ'6I@NV@*=TV>2@PWY"B]DH]0:OY#OD
- MWD"<S?,A=I4_4^]Q7T=X7V^@3@=$3WN`^]FR:X#]A7R/WN3S=+G9PG;ZORH,
- MJLHR?X/NL\#@%?=?WI4^HV?X`"WPS^D2[_05R1&EWWH:>MTZI[A-;WON1#G#
- MG[H]\1+O7@]]J"']&+HCVN45_BBTW>J0OA7M\8+U*/27U?.\H'$Q)W3/7[CR
- M<Y*J"8._15)N>[TQ0`+=Q.ULMK(GZ3J%$>);68@+B8$DUG:5;K=T=URQKHK1
- ME,0XH:SP$XIJ77;'BN?5`]*"=4*Y*S",!>L_4$L#!!0````(`/92,!W$D[.D
- M0PD``"#(!0`,````5$5,14-!4D0N4%).[=V_:B-''`?P75RH":<'D$%="E?.
- M'80+!)L+^`72I$^=PAQ7.EB0%].CZ!%4JC#:Z(]]EG=G[;E!N_9Z/M]"K&3D
- MXE,,W]%J?II<37[^Y^.O7S:/OUQ-SKY].C__<W+V]?S+Y.SOCY]_^ZN0YW/O
- M=%L=-:OBO843IPZ<KH_[7S\7G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.
- MG#AQXL2)$R=.G#C]D%/+-WTX<>+4H5/SE6U&G#AQXL2)$R=.G#AQXL1I<$Z-
- M/?"<TS4G3AT[+6JOE'-.UYPX<>+$B1,G3IPX<>(T1*?R8`^\Y,2)4S].\\.G
- MG#AQXL2)$R=.G#AQXL1IN$XGNSWP7<&)$Z<>G6;;RU-.G#AQXL2)$R=.G#AQ
- M>MM.FQW>?U6U'E?5ZK*J%IPX<>+$B1,G3IPX<>+$B1,G3F&G_9WB-2=.G#AQ
- MXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)TXP3)TZ<.''BQ(D3)TZ<
- M.''BQ(D3)TZ<.+V_>3VA<.+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$
- MB1.GMQU.G#AQ&K+3M'J2!2=.G+IW.GWZEP4G3IPX<>+$B1,G3IPXO?%S0`M.
- MG#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.
- MG#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXI3E?-]R;E[/-2=.G#AQ
- MXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G%X_G#AQXL2)$R=.G#AQXL2)$R=.
- MG#AQXL2)$Z>FTZAZS+S@Q(E3+T[-MRPX<>+4N]/!BL6)$R=.G#AQXL2)$R=.
- MG(;C-*[:PXD3IVZ</@3?Y_,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G
- M3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G
- M3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G
- M3IPX<>+$J1E.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.
- MG#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.
- MG#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.
- MG#AQXL2)T_'#B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$
- MB1,G3KDY/1].G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.
- MG#AQXL2)$R=.G)X/)TZ<.''BQ(D3)TZ<.''BQ(D3)TZ<.''BQ(D3)TZ<.''B
- MQ(D3)TZ<.''BQ(D3)TZ<.''BQ(D3)TZ<.''BQ(D3)TZ<.''BQ(D3)TZ<.''B
- MQ(D3)TZ<.''BQ(D3)TZ<.''BQ(D3)TZ<.''BQ(D3)TZ<.''BQ(D3)TZ<.''B
- MQ(D3)TZ<.''BQ.GXX<2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.
- MG#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.
- MG#AQXL2)$R=.G#C%AQ,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX
- M<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX
- M<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX
- M<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX
- M<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX
- M<>+$B1,G3IPX<7K-<.+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G3IPX<>+$B1,G
- M3IPX<>+$B1,G3IPX<>K;:<PISFG&*<9I-.<4XW2RX!3C5"XYQ3@5*TX13K/B
- MAE.$T[RXX!1R.JEV6>Z=-JOXE-/+3N4RI4#EY[19Q1,*5!9.L_N+O=--2H'*
- MT.DBI4!EZ#1-*5`9.HU3"E2&3DD%*D.GI`*5H5.94J`R=$HJ4#DZI12H')U2
- M"E2.3BD%*D>GE`*5B=-^)WSOE%*@<G1**5`Y.I4)!2H3I\7^:N^44J"R=$HH
- M4%DZ)12H+)T2"E263@D%*DNGA`*5I=.V0%6-W'&J.96;`L7I9:=M@>(4X11<
- MQ4\YU9U^YQ3E%"3AQ(D3)TZ<.!6<.''BQ(D3)TZ<.''BQ(D3IW?GM"[O3E:C
- MY7@QG5_.;HOUCFU[.VK[?8/M/:G=`R=.G#AQXL2)$Z<7G1Z^T\.)$R?K$R=.
- MG+)V.N$4Y33B%.4TYA3E-.44Y71Y[^3S\>>=_N44Y?3TL"*G%J=RR2G&J7:8
- MFE.+4^UP/J?O]X.WUX]S_VO#'CBU.-6&AW!J<;K@%.5TPRG*J3;K@5/8J5QR
- MBG&JSZ+A%':JSS;B%':JS\KB%':JSU[C%':JU2=.+4ZU^L2IQ:D^*HM3T*E<
- M<HIQ:HSRXQ1T:HR&Y!1T:HP:Y11T:HRNY11TJM<G3G6G<7C,&J>@4V/2**>@
- MTY+3"TXMX<2)$R=.G(;N]'`^8\Z)$Z?>G(K'.0^<.''BQ(E39DZE\P@_Y.0<
- M$"=.G#B];:>'7?""$R=.?3E]S]ZI"H03)TZ=.AT\MSYQXL2)$Z?!AA.G5W;R
- M^7C3Z;S]UOX<2I'Z>#Q>G@FA,G3IPX<>+$B1,G3IPX#<QIMP%><^+$J??U
- MZ0,G3IPX<>+$B1,G3IPX<>+TWIT:OP?$B1,G3IPX<>+$B1,G3IPX<>+$B1,G
- M3IPX<>+$B1,G3@.X'_SD=TDX<>+$B1,G3IPX<>+$B1,G3IPX<>K$R;Q#3IQZ
- M=VI](R=.G#AQXL2IX,2)4[)3U9H[3IPX=>.4&DZ<.''BQ(D3)TZ<.''BQ(G3
- MD,.)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQXL2)$R=.G#AQ
- MXL2)$R=.G#AQXL2I4Z?;ZJA9%>\MG#AUX%0()TZ<.''B))PX<>+$B1,GX<2I
- MB_PT.?OZQ^3J?U!+`P04````"`"*=B\=14[.>F0%``#,%P``#````%1%3$5#
- M05)$+E,P,9682V_<-A#'[P;\'8B]-^'P)0DY!(JLV&KL]6)7Z[B]%(9K-#DD
- M*=Q>TD]?OF;T('>UBP4$:H?DC\/Y#TGQ7?_T_:\?O^R>O[Q\>_KWZS-[@#>"
- MO[#=R^O7EW]8UUU>]/7Z^OZ/77/3WM5]US"PO_KR8G?3MCWC]@=@*LE*84IF
- M[/_=[RV34&@&7`.K5%4QK:MB^._RHN[[+5M=M;MFVVWZ[GZ]8F#8JMO=%Z4M
- M['Y^?_[RAMV]?/OQ^I,U3Z]_KCS5P?CEQ:_[=<.DX)QIX/BNM'T79GB7,[NO
- M+^E=BUE]Y=Z5>]_4VYY)X^I7]J%D91^%==%VIX,OWNTPGC`R].FAOMVW*U:Q
- ME6)W-_]-QAUJ//;UK:^0L[T_9+%SU5VOZ_Y^ZVL\PLH.R8W0N>U^$FOVOVW"
- M``+(UU+EO%8TSEB;;AV[=;/GIR24R-G)H-;UG44!9ZO[7>-')&(#&T0/LQW:
- MD=O6JT_6K$MGMG5`E&2/0"`@G`@4"(0LL$8@C(';MNEK9'+$:0>.D6_75U$"
- M/OI!![;(0%>2F8)K)HMC$H@J3F=W9O:!-EYVQ3P\^_<3>PDS^TP.>SL7Q@E:
- M)CV1'(CKW0(S5'1!"+[Z^3=8$DM!^+C?M:X_$1ND00!K+DIGGD<]`#D!7:E8
- M`CYL-LCC69Y$'L_R1(D\7UKD7:^O(L_73WDJ\D29YQGBF9/\:QKDF2Q/(\_D
- MYU/0?+H2+/&NZK[&"159H,`)%7D'*8"^M*B8[:Y'!_,!+-'!`P$D!WUID=?<
- M?D)>WK\">0?\HXP0)V7$YRWYET\(@[Q)0L15*62F4YHI<.E)5B6)&QF34+E%
- M3`*3%;A%[-BJ-%LQW'(MM8Y+GU'C)6/8PX1@?W_$BHY;F>S:TM0;K.4>OCNW
- MS6\;ZT19Q#U!:`9*LD*Y4=UVZ]8VD=8HK"&49*'#O$:K$=%3@SZ/K30/H2T?
- M;6)#`UF-FAX/W@?G0XD[F(I.#+%S]K##B3C!$3:,1`RP!:74#C;9+B<L9Y;3
- M[1+R2@!4@BI)">(<)8AQ@$]2`C])"3*K!#BF!$Y*@(P2@)0`&24`*0%2)0`I
- M`<Y2`BPH`7)*`%("G*4$.*X$.*($VDQEP243IO+=%4P)2Z@.2F'3-6":4ATZ
- M=>Y//8_NW7+B%B[IY9R5Q@"+FAUJ^F-@B3'R)7]>5TPN["<?;'>A96GG"+A*
- M3B#<5;!3I]R.,C]V!EYQ!D_'(_5!'IZ#$YXAGCF#Y\Z1YAC/'8--CJ>)I\_@
- M%:O8\A!/N@HYGB*>0EZQQ/,'GM#R$,\%6.5XM+K[D@KG@05>_&R0QX`NPC('
- M%`04^(`3@$X0XAC0A5CD@+1J^=*)$:R=X.$8SX48<CQ./'X&S_G'C_'*54`E
- MO!)7+5_R7T'*QG!!H1(SWG57B#FNBODNW'`4GR<\QX0_%2<PX?.X,J9[BJ//
- M&E\Z%0>8[WE<$;,]Q6G"Z3-P_&VW[C'E\T@3$SY%*D+25VRQA/2?5+%E%J=C
- MOJ<X23B).%C"W36W6TSX/$_%=$]Y@GCB]!FMU=MM[U<U<9@I8\:G3"`FG,&4
- MF/)YG(@)G^(XX?@9.($9G\=!S/<)+G[B#"<55>%J,_[$Z=O'GKFQTF7@Y!:P
- M<#H%&.XN/G?;-L;'D/;]K=[<@C%$BTX^)Q,+95*T^$.=\)X/MXG!4B679A/+
- MY'8+.;1MC>XJAU$/CU%OHXT`XD(VL0QW=X-%3[],\A:\,\#>:`L/I=&,XGOX
- M7AA9Z$9UN/$8>RKT.',32VBMIQQ!-Y#A9G88]<A2SBR3.Q[LC:XHZ+(BL=`R
- MC;VIY`(@M:@HD[%V_"-O(56-+(.J@L^CL:FI930V,9FW$(7_`5!+`0(4`!0`
- M```(``Q2,!V^G@!LQ@@``.P@```,``````````$`(`````````!414Q%0U)$
- M,2Y!4TU02P$"%``4````"`!*4C`=CCHX#\L(``#X'P``#``````````!`"``
- M``#P"```5$5,14-21#(N05--4$L!`A0`%`````@`FT0N'<0;&V`*!0``/!<`
- M``P``````````0`@````Y1$``%1%3$5#05)$+D(P,5!+`0(4`!0````(`*)$
- M+AW[.7CW$P4````@```,````````````(````!D7``!414Q%0T%21"Y#35!0
- M2P$"%``4````"`!K4C`=UE#(="T(````'```#````````````"````!6'```
- M5$5,14-21#$N0T]$4$L!`A0`%`````@`;5(P'=:1H<KU!P```!X```P`````
- M```````@````K20``%1%3$5#4D0R+D-/1%!+`0(4`!0````(`$!#'!UNJ^N<
- MP`0``&(3```*``````````$`(````,PL``!024-214<N15%54$L!`A0`%```
- M``@`:U(P'2C2B*Y<````?`$```P``````````0`@````M#$``%1%3$5#4D0Q
- M+D524E!+`0(4`!0````(`&U2,!TIRVCV9P```)`#```,``````````$`(```
- M`#HR``!414Q%0U)$,BY%4E)02P$"%``4````"`!K4C`=#LVE_>8!``"G!```
- M#``````````!`"````#+,@``5$5,14-21#$N2$584$L!`A0`%`````@`;5(P
- M'=V65G;,`0``800```P``````````0`@````VS0``%1%3$5#4D0R+DA%6%!+
- M`0(4`!0````(`&M2,!T#9[*E[!@```1V```,``````````$`(````-$V``!4
- M14Q%0U)$,2Y,4U102P$"%``4````"`!M4C`=SK(OU808``"#=0``#```````
- M```!`"````#G3P``5$5,14-21#(N3%-44$L!`A0`%`````@`,Z`M'>O)T?/$
- M````M0$```P``````````0`@````E6@``%1%3$5#05)$+DY%5%!+`0(4`!0`
- M```(`)=`+AU%6_@T604``#X-```,````````````(````(-I``!414Q%0T%2
- M1"Y00T)02P$"%``4````"`#V4C`=Q).SI$,)```@R`4`#````````````"``
- M```&;P``5$5,14-!4D0N4%).4$L!`A0`%`````@`BG8O'45.SGID!0``S!<`
- M``P``````````0`@````<W@``%1%3$5#05)$+E,P,5!+!08`````$0`1`-@#
- (```!?@``````
- `
- end
- sum -r/size 61640/45861 section (from "begin" to "end")
- sum -r/size 58373/33263 entire input file
-
- ------------------------------------------------------------------------------
- <UUEncoded Part Ends Here!>.
-